背景
本人是一個有16年不同語言編寫復雜應用經歷的程序員,第一次使用是為了能夠綁定C++庫更加高效的使用。
除Python外,我還寫過PHP,Ruby, Smalltalk以及你可能不信的C++。 這些組合中,我發現Python/Flask組合是其中最靈活的一個。
應用
接下來將要開發的app是一個有微博服務器特征的應用,我將分為十幾個小節來介紹此app開發,下文將稱此app成為microblog。我認為這是一個好的注意。
下面是我將為此app創建的幾個要點:
- 用戶管理,包括管理登陸,session,用戶角色,profile以及用戶的avatars
- 數據庫管理,包括遷移處理
- 網頁Form支持,包含驗證支持
- 對於長列表項的分頁支持
- 全文搜索
- 郵件通知用戶
- HTML以及RSS模板
- 多語言支持
- Caching以及其他性能優化
- 開發和生產服務的調試技術
- 生產服務上的安裝
正如你看到的,我將創建一個完美的整個應用,希望該app結束時,將成為編寫其他web應用的一個模板。
需求
需要一台安裝Python2.6或2.7的機器,我們創建的應用可以在Window, OS X和Linux上運行。
該教程假定你比較服務器終端窗口(Windows用戶的命令行)以及知道你的操作系統文件管理的基本命令行。如果你不清楚這些,我建議你在使用命令行前學習一下如何創建目錄,復制文件等命令。
最后,你應該懂一些編寫兼容的Python代碼,最好也熟悉 Python的一些模塊和包
安裝Flask
好了,我們開始了!
如果你還沒有安裝Python,此處下載並安裝 Python2.7
接下來我們需要安裝Flask和一些使用到的擴展,我比較喜歡的方式是創建一個 虛擬環境(virtual environment). 並將所有的內容都裝在此處,這樣你的主Python安裝將不會受到影響。此外,你也不需要root權限來安裝應用和擴展。
打開一個終端,選擇一個將要放置應用的位置,並創建一個microblog的文件夾。
然后下載 virtualenv.py,並將其放到microblog目錄下 使用下面的命令創建虛擬環境
python virtualenv.py flask
上面的命令將在flask目錄下創建一個完整的python環境。
虛擬環境可以按意願被激活或者取消激活,作為激活的環境,將在系統的path環境添加本地的bin目錄,因此如果輸入python將得到的虛擬環境下的版本而不是系統中的版本。 我個人非常不喜歡這個特征,因此我從來不激活任何我的環境,相反,我僅通過輸入路徑名來調用python解釋器。
如果你使用Linux, OS X或Cpygwin,安裝flask及其擴展使用下面的命令,一個接一個:
flask/bin/pip install flask
flask/bin/pip install flask-login
flask/bin/pip install flask-openid
flask/bin/pip install flask-mail
flask/bin/pip install flask-sqlalchemy
flask/bin/pip install sqlalchemy-migrate
flask/bin/pip install flask-whooshalchemy
flask/bin/pip install flask-wtf
flask/bin/pip install flask-babel
flask/bin/pip install flup
(備注:在國內,直接這么安裝,速度會比較慢,可以在install后添加一個參數 --index-url http://c.pypi.python.org/simple)
如果是Windows系統,命令稍微有些不同
flask\Scripts\pip install flask
flask\Scripts\pip install flask-login
flask\Scripts\pip install flask-openid
flask\Scripts\pip install flask-sqlalchemy
flask\Scripts\pip install sqlalchemy-migrate
flask\Scripts\pip install flask-whooshalchemy
flask\Scripts\pip install flask-wtf
flask\Scripts\pip install flask-babel
flask\Scripts\pip install flup
這些命令將下載和安裝我們應用中所要的所有包。
注意SQLAlchemy: 版本0.8與之前的版本是不兼容的。為此,sqlalchemy-migrate模塊將不會在0.8版本下運行。為此我們需要強制安裝0.7.9的版本。使用下面的命令
flask/bin/pip uninstall sqlalchemy
flask/bin/pip install sqlalchemy==0.7.9
一旦sqlalchemy-migrate更新到支持0.8,我們最好應該在最新版本上使用該模塊。
Windows用戶需要多一個步驟,如果你有敏銳的觀察能力,你將發現flask-mail在Windows命令行列表中沒有包含,該擴展在Windows中不包含,因此我們需要通過通過下面的方式來安裝
flask\Scripts\pip install --no-deps lamson chardet flask-mail
我將不詳細解釋為和如此,如果你需要了解更多信息,請查看flask-mail文檔
如果所有的包安裝成功,請刪除不再需要的virtualenv.py。
Flask中的“Hello, World”
如果你已經在microblog文件夾下包含了flask子目錄,該子目錄存在python解釋其以及Flask框架和我們將開發應用需要的擴展。現在我們將編寫我們第一個web應用。
當你cd到microblog目錄時,為app創建下面的基本目錄結構:
mkdir app
mkdir app/static
mkdir app/templates
mkdir tmp
app目錄將是放置我們應用的包,static子目錄將包含整個靜態文件,如images,javascripts,以及stylesheets, templates子目錄顧名思義就是放置我們的模板文件。
讓我們開始為app包創建一個簡單的腳本(文件 app/init.py):
from flask import Flask
app = Flask(__name__)
from app import views
上面的腳本創建一個應用對象(Flask類),然后導入我們還未編寫的views模塊。
views是處理web瀏覽器訪問時請求的響應。在Flask中views采用Python函數編寫方式,每個views函數映射為一個或者或個請求的URL。
開始編寫地一個view函數(文件 app/views.py):
from app import app
@app.route('/')
@app.route('/index')
def index():
return "Hello, World!"
該view相當的簡單,僅返回一個字符串,該字符串將在客戶端的瀏覽器上顯示。兩個在函數上的route的修飾符將創建urls / 和 /index的映射到該函數。
最后一個步驟是創建一個啟動開發的web server整個應用的腳本,然后通過該腳本運行web app。我們稱此腳本為run.py
#!flask/bin/python
from app import app
app.run(debug = True)
該腳本簡單的從我們的app包中導入app變量,然后調用app變量的run方法啟動服務,記住app變量包含一個整我們之前創建的Flask實例。
為啟動應用,需要運行該腳本。在OS X , Linux以及Cygwin中,在運行該腳本前需要通知系統這是一可執行文件:
chmod a+x run.py
該腳本可以通過下面方式簡單運行:
./run.py
在Windows中處理稍微有些不一樣,Windows中沒有辦法讓系統知道該文件是一個可執行文件。因此你需要將此文件作為Python參數:
flask/Scripts/python run.py
服務器初始化后將監聽5000端口,然后打開你的瀏覽器,輸入下面的URL地址:
http://localhost:5000
此外也可以通過下面的URL:
http://localhost:5000/index
你看到在action中的route映射了么?第一個URL映射到/,第二個映射到/index。兩個routes都關聯到自己的view函數中,因此將產生相同的結果。 如果你輸入另外的route,你將得到錯誤,因此這兩個映射到view函數中。
當你想要結束server運行,使用Ctrl-C停止。
在此篇教程中,主要介紹了一些安裝。
為了你可以懶得輸入的這些代碼,可以在此處下載該 代碼
注意在你運行應用前,你仍舊需要按照之前的介紹安裝Flask。
接下來
下一屆我們將使用HTML模板修改我們簡單的應用。
下一章見。
DamonChen(翻譯)
當初翻譯的時候,也沒有做仔細的校對,有不明白或者存在疑問的,看原文或者發評論。