做者是一個使用多種語言開發複雜程序而且擁有十多年經驗的軟件工程師。做者第一次學習 Python 是在爲一個 C++ 庫建立綁定的時候。html
除了 Python,做者曾經用 PHP, Ruby, Smalltalk 甚至 C++ 寫過 web 應用。在全部這些中,Python/Flask 組合是做者認爲最爲自由的一種。python
做爲本教程的一部分–我要開發的應用程序是一個極具特點的微博服務器,我稱之爲 microblog 。git
我會隨着應用程序的不斷地進展將涉及到以下這些主題:github
用戶管理,包括管理登陸,會話,用戶角色,權限以及用戶頭像。web
數據庫管理,包括遷移處理。sql
Web 表單支持,包括對各個字段的驗證。數據庫
分頁處理。flask
全文搜索。瀏覽器
用戶郵件提醒。緩存
HTML 模板。
支持多國語言。
緩存以及其它性能優化技術。
開發以及生產服務器的調試技巧。
在生產服務器上安裝。
我但願這個應用程序將可以成爲編寫其它類型的 web 應用程序的一個樣板,當它完成的時候。
若是你有一臺可以運行 Python 的機器,可能你將會很輕鬆。該教程中的應用程序可以完美地運行在 Windows, OS X 以及 Linux 上。除非另有說明,本系列的文章中提供的代碼已經在 Python 2.7 和 3.4 上測試過。
本教程假定你很熟悉操做系統的終端窗口(命令提示符爲 Windows 用戶),清楚基本命令行文件管理功能。若是你還不熟悉這些的話,我強烈建議你先學習使用命令行,好比如何建立文件夾等,接着再繼續。
最後,你應該還可以很舒服地(熟練地)編寫 Python 代碼。強烈推薦熟悉 Python 的 Python 模塊和包 。
好的,讓咱們開始吧!
如今咱們必須開始安裝 Flask 以及一些咱們會用到的擴展。我首選的方式就是建立一個 虛擬環境 ,這個環境可以安裝全部的東西,而你的主 Python 不會受到影響。另一個好處就是這種方式不須要你擁有 root 權限。
所以,打開一個終端窗口,選擇一個你想要放置應用程序的位置以及建立一個包含它的新的文件夾。讓咱們把這個應用程序的文件夾稱爲 microblog 。
若是你正在使用 Python 3.4,先進入到 microblog 目錄中接着使用以下的命令建立一個虛擬環境:
$ python -m venv flask
須要注意地是在某些系統中你可能要使用 python3 來代替 python。上面的命令行在 flask 文件夾中建立一個完整的 Python 環境。
若是你使用 Python 3.4 如下的版本(包括 python 2.7),你須要在建立虛擬環境以前下載以及安裝 virtualenv.py 。若是你在使用 Mac OS X,請使用下面的命令行安裝:
$ sudo easy_install virtualenv
若是你使用 Linux,你須要獲取一個包。例如,若是你使用 Ubuntu:
$ sudo apt-get install python-virtualenv
Windows 用戶們在安裝 virtualenv 上有些麻煩,所以若是你想省事的話,請直接安裝 Python 3.4。在 Windows 上安裝 virtualenv 最簡單地方式就是先安裝 pip,安裝方式在 這裏 <https://pip.pypa.io/en/latest/installing.html>。一旦安裝好了 pip 的話,下面的命令能夠安裝 virtualenv:
$ pip install virtualenv
爲了建立一個虛擬環境,請輸入以下的命令行
$ virtualenv flask
上面的命令行在 flask 文件夾中建立一個完整的 Python 環境。
虛擬環境是可以激活以及停用的,若是須要的話,一個激活的環境能夠把它的 bin 文件夾加入到系統路徑。我我的是不喜歡這種特點,因此我歷來不激活任何環境相反我會直接輸入我想要調用的解釋器的路徑。
若是你是在 Linux, OS X 或者 Cygwin 上,經過一個接一個輸入以下的命令行來安裝 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 guess_language $ flask/bin/pip install flipflop $ flask/bin/pip install coverage
若是是在 Windows 上的話,命令行有些不一樣
$ flask\Scripts\pip install flask $ flask\Scripts\pip install flask-login $ flask\Scripts\pip install flask-openid $ flask\Scripts\pip install flask-mail $ 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 guess_language $ flask\Scripts\pip install flipflop $ flask\Scripts\pip install coverage
這些命令行將會下載以及安裝咱們將會在咱們的應用程序中使用的全部的包。
如今在你的 microblog 文件夾中下有一個 flask 子文件夾,這裏有 Python 解釋器以及 Flask 框架以及咱們將要在這個應用程序中使用的擴展。 是時候去編寫咱們第一個 web 應用程序!
在 cd 到 microblog 文件夾後,咱們開始爲應用程序建立基本的文件結構:
mkdir app mkdir app/static mkdir app/templates mkdir tmp
咱們的應用程序包是放置於 app 文件夾中。子文件夾 static 是咱們存放靜態文件像圖片,JS文件以及樣式文件。子文件夾 templates 顯然是存放模板文件。
讓咱們開始爲咱們的 app 包(文件 app/__init__.py )建立一個簡單的初始化腳本:
from flask import Flask app = Flask(__name__) from app import views
上面的腳本簡單地建立應用對象,接着導入視圖模塊,該模塊咱們暫未編寫。
視圖是響應來自網頁瀏覽器的請求的處理器。在 Flask 中,視圖是編寫成 Python 函數。每個視圖函數是映射到一個或多個請求的 URL。
讓咱們編寫第一個視圖函數(文件 app/views.py ):
from app import app @app.route('/') @app.route('/index') def index(): return "Hello, World!"
其實這個視圖是很是簡單,它只是返回一個字符串,在客戶端的網頁瀏覽器上顯示。兩個 route 裝飾器建立了從網址 / 以及 /index 到這個函數的映射。
可以完整工做的 Web 應用程序的最後一步是建立一個腳本,啓動咱們的應用程序的開發 Web 服務器。讓咱們稱這個腳本爲 run.py,並把它置於根目錄:
#!flask/bin/python from app import app app.run(debug = True)
這個腳本簡單地從咱們的 app 包中導入 app 變量而且調用它的 run 方法來啓動服務器。請記住 app 變量中含有咱們在以前建立的 Flask 實例。
要啓動應用程序,您只需運行此腳本(run.py)。在OS X,Linux 和 Cygwin 上,你必須明確這是一個可執行文件,而後你能夠運行它:
chmod a+x run.py
而後腳本能夠簡單地按以下方式執行:
./run.py
在 Windows 上過程可能有些不一樣。再也不須要指明文件是否可執行。相反你必須運行該腳本做爲 Python 解釋器的一個參數:
flask/Scripts/python run.py
在服務器初始化後,它將會監聽 5000 端口等待着鏈接。如今打開你的網頁瀏覽器輸入以下 URL:
http://localhost:5000
另外你也能夠使用這個 URL:
http://localhost:5000/index
你看清楚了路由映射是如何工做的嗎?第一個 URL 映射到 /,而第二個 URL 映射到 /index。這兩個路由都關聯到咱們的視圖函數,所以它們的做用是同樣的。若是你輸入其它的網址,你將會得到一個錯誤,由於只有這兩個 URL 映射到視圖函數。
你能夠經過 Ctrl-C 來終止服務器。到這裏,我將會結束這一章的內容。對於不想輸入代碼的用戶,你能夠到這裏下載代碼:microblog-0.1.zip。
下一章咱們將會小小修改下咱們的應用,使用 HTML 模板。我但願在下一章再見到你們!