The Flask Mega(教程一 - Hello World)


原文鏈接:

背景

本人是一個有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(翻譯)

 

 

當初翻譯的時候,也沒有做仔細的校對,有不明白或者存在疑問的,看原文或者發評論。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM