前面都是前端的一些內容,但是要想做出一個能用的東西,始終是不能脫離后端的。因此這一節主要介紹如何使用python的一個web框架webpy。我想讀我這個教程的同學大多都是前端,對后端沒有什么感覺。因此關于后端的介紹以能用為主,不涉及太多的后端的東西。
## 9.1 python是什么
簡單來說Python和JavaScript一樣,是一個動態語言,運行在服務器端。語法類似于程序偽碼,或者說類似于自然語言。過多的語法和關鍵字就不再介紹。只需要記住Python是用縮進來判斷語法塊的,不像js用大括號。
## 9.2 webpy是什么
和Backbonejs是js的一個框架一樣,webpy是python的一個簡單的web開發的框架。可以通過簡單的幾行代碼啟動一個web服務(雖然只是輸出helloworld ^_^)。用它可以簡單的滿足咱們的開發需求。
因為是基于Python的框架,因此需要先安裝Python環境,具體怎么裝就不細說了,到[http://python.org/download/](http://python.org/download/)?安裝python2.7.6這個版本。
之后按照?[webpy](http://webpy.org/)?官網的說明,通過命令安裝webpy:
~~~
pip install web.py
或者
easy_install web.py
注意:linux下非root用戶需要sudo
~~~
## 9.3 來一個Helloworld
安裝好之后,直接把webpy網站上的那段代碼,貼到的用編輯器打開的文件中,保存為server.py。webpy網站代碼如下:
~~~
import web
urls = (
'/', 'index'
)
app = web.application(urls, globals())
class index:
def GET(self):
return 'Hello, World!'
if __name__ == "__main__":
app.run()
~~~
然后在server.py的同目錄下執行:
~~~
python server.py
~~~
之后命令行會輸出:
~~~
http://0.0.0.0:8080/
~~~
這個提示,現在你在瀏覽器訪問?[http://127.0.0.1:8080](http://127.0.0.1:8080/)?,就會看到熟悉的helloworld,是不是超級簡單。
## .4 簡單構建api接口
在上面代碼的基礎上,按照前面backboneModel的定義,我們需要一個todo這模型的對應的鏈接,這個鏈接應該返回json格式的數據。并且能夠支持post、put、get、delete這四個請求。現在來看接口部分的代碼:
~~~
#添加todo相關的urls
urls = (
'/', 'index', #返回首頁
# 處理前端todo的請求,操作對應的todo
'/todo/(\d+)/', 'todo',
# 處理前端todo的整體請求,主要是獲取所有的todo數據
'/todo/', 'todos',
)
~~~
~~~
#添加接口的處理代碼
class todo:
def GET(self, todo_id=None):
context = {
"title": "下午3點,coding",
"order": 0,
"done": False,
}
return json.dumps(context)
#處理整體的請求
class todos:
def GET(self):
result = []
result.append({
"title": "下午3點,coding",
"order": 0,
"done": False,
})
return json.dumps(result)
~~~
添加完這部分代碼之后,啟動server.py。訪問?[http://localhost:8080/todo/](http://localhost:8080/todo/)?就能看到數據了,這里只是實現了get方法,其他的方法在下一篇中介紹。
## 9.5 加入數據庫sqlite
關于數據存儲部分,我們使用sqlite數據庫。sqlite的好處就是不需要安裝即可使用。這樣可以省去在數據庫安裝方面的折騰。
sqlite的介紹就不多說了,感興趣的同學想必已經在查sqlite相關的東西了。這里只是演示在webpy中如何操作sqlite。
具體依然看代碼:
~~~
#使用sqlite3操作數據庫
import sqlite3
conn = sqlite3.connect('todos.db')
#把todo改為這樣:
class todo:
def GET(self, todo_id=None):
cur = conn.cursor()
cur.execute(sql_query + ' where id=?', (todo_id, ))
todo = cur.fetchone()
cur.close()
# 先用這種比較傻的方式
context = {
"id": todo[0],
"title": todo[1],
"order": todo[2],
"done": todo[3],
}
return json.dumps(context)
class todos:
def GET(self):
result = []
cur = conn.cursor()
cur.execute(sql_query)
todos = cur.fetchall()
cur.close()
for todo in todos:
result.append({
"id": todo[0],
"title": todo[1],
"order": todo[2],
"done": todo[3],
})
return json.dumps(result)
~~~
完整代碼可以在 code 文件夾找到。使用時,先運行init_sqlite.py這個文件,會幫你創建一個sqlite的數據庫,并且插入一條數據,然后運行server.py就可以在瀏覽器訪問?[http://localhost:8080/todo/](http://localhost:8080/todo/)?或者http://localhost:8080/todo/1/ 看到輸出數據了。
## 9.6 總結
這里打算用webpy+sqlite來完成后臺主要是想到這個東西比Django+Mysql那一套搭建起來比較容易。有興趣看Django后臺搭建的可以看這篇文章:?[django開發環境搭建及使用](http://www.the5fire.com/10-django-dev-env.html)?。
這里沒有使用webpy自帶的db模塊進行數據的操作,主要是文檔和案例都不全,并且源碼看起來挺繞。用Python自帶的模塊顯然操作起來有點笨拙,之后會對這個數據操作部分進行簡單的封裝。
- 關于
- 前言
- 第一章 Hello Backbonejs
- 第二章 Backbonejs中的Model實踐
- 第三章 Backbonejs中的Collections實踐
- 第四章 Backbonejs中的Router實踐
- 第五章 Backbonejs中的View實踐
- 第六章 實戰演練:todos分析(一)
- 第七章 實戰演練:todos分析(二)View的應用
- 第八章 實戰演練:todos分析(三)總結
- 第九章 后端環境搭建:web.py的使用
- 第十章 實戰演練:擴展todos到Server端(backbonejs+webpy)
- 第十一章 前后端實戰演練:Web聊天室-功能分析
- 第十二章 前后端實戰演練:Web聊天室-詳細設計
- 第十三章 前后端實戰演練:Web聊天室-服務器端開發
- 第十四章 前后端實戰演練:Web聊天室-前端開發
- 第十五章 引入requirejs
- 第十六章 補充異常處理
- 第十七章 定制Backbonejs
- 第十八章 再次總結的說
- Backbonejs相關資源