Flask系列教程(一)-----------入門
Flask是一個基於Python的web框架,它的設計目的是提供Web開發所需的最小功能子集。
Flask與別的框架(尤其是採用其他程式語言的框架)的不同之處在於:它沒有繫結諸如資料庫查詢或者表單處理等功能庫,以及它們所組成的整個生態系統。它傾向於對這些功能的實現方式不做任何限定。
這種系統帶來的主要好處是:開發者能夠使用他們想用的任何方式和工具,去設計他們的應用架構。另外,對於一些常見的通用功能,Flask沒有以某種特定方式去實現,這意味著在Flask中,對標準庫的使用會比其他框架裡多,這保證了通用功能的穩定性及針對其他Python程式設計師的可讀性。由於Flask社群十分龐大,所以該社群提供的新增通用功能的方式非常多。所以通過本系列教程,瞭解它們如何幫助我們避免重複造輪子。這些擴充套件的妙處在於,如果不需要那些額外的功能,就不用引入它們,這樣我們的應用才會保持簡潔、輕量。
這種系統的最大弊端是,大部分新的Flask使用者不知道如何正確地規劃大型應用的結構,最後弄出一大堆讓人難以理解和維護的程式碼。所以本教程另一個重點是如何為Flask應用建立模型/檢視/控制器(MVC)架構。
MVC體系在最初被髮明時,主要用來設計桌面應用的使用者介面。它將資料處理(model),互動邏輯(controller)和使用者介面(view)隔離成三層不同的元件。
這三層元件的隔離,使得程式設計師不用為每個網頁重新實現一遍相同的功能,而是隻要重用那些程式碼。比如,若是沒有把處理資料的程式碼拆分到單獨的函式中,那麼我們不得不在每個頁面的渲染函式裡,把同樣的資料庫連線程式碼和SQL查詢程式碼都寫一遍。
我們將使用git做為版本控制軟體,開發環境為ubuntu.python版本為3.4.3
安裝flask
使用pip安裝,由於是在python3環境中,所以使用pip3.
pip3 install flask
使用git做版本管理
建立工程目錄
mkdir flask_tutorials
切換到工程目錄
cd flash_tutorilas
初始化版本庫
git init
建立版本庫過濾檔案
touch .gitignore
向.gitignore檔案中寫入以下內容,過濾env目錄,python的編譯檔案:
cat .gitignore
env/
*.pyc
開始我們的專案
config.py:
class Config(object): pass class ProdConfig(Config): pass class DevConfig(Config): DEBUG = True
main.py:
from flask import Flask from config import DevConfig app = Flask(__name__) app.config.from_object(DevConfig) @app.route('/') def home(): return '<h1>Hello World!</h1>' if __name__ == '__main__': app.run()
對於一些瞭解Flask API的讀者來說,這個程式非常基礎,它只是在我們訪問http://127.0.0.1:5000的時候,在瀏覽器中顯示一行"Hello World!"。另外,Flask使用者可能很不熟悉的一個地方是,這裡使用了config.from_object,而不是app.confing['DEBUG']。使用from_object是因為未來我們會加入很多配置項,如果要在不同的配置之間切換,那麼手動去改每個變數是一件煩瑣乏味的事。
提交我們的程式碼
git add --all
git commit -m "your comment"
啟動web服務
[email protected]:~/python/flask_tutorials$ python3 main.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 267-148-615
使用flask-script
Flask有眾多擴充套件,我們將首先使用Flask Script擴充套件。使用它可以建立命令,並在Flask的應用上下文中執行,因為這樣才能對Flask物件進行修改。
Flask Script自帶了一些預設的命令,可以執行伺服器或者開啟帶應用上下文的Python命令列。
安裝
pip3 install flask-script
使用
先建立一個簡單的manage.py指令碼。
manage.py:
首先,匯入Flask Script物件,程式碼如下:
from flask_script import Manager, Server from main import app 然後把你的app傳給Manager物件,以初始化Flask Script: manager = Manager(app) 現在我們來新增一些命令。這裡執行的伺服器跟通過main.py執行的普通開發伺服器是一樣的。make_shell_context函 數會建立一個Python命令列,並且在應用上下文中執行。返回的字典告訴Flask Script在開啟命令列時進行一些預設 的匯入工作。 manager.add_command("server", Server()) @manager.shell def make_shell_context(): return dict(app=app) 通過manage.py執行命令列在將來會十分必要,因為一些Flask擴充套件只有在Flask應用物件被建立之後才會被初始化。直接 執行預設的Python命令列會令這些擴充套件返回錯誤。 然後,在檔案結尾新增如下程式碼,這是Python的標準方式,用來限制僅在使用者直接執行檔案的時候,才執行上面的 程式碼:
if __name__ == "__main__": manager.run()
現在你可以這樣來執行開發環境伺服器:
Z:\python\flask_tutorials>python manage.py server
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 273-062-909
以及使用命令列
Z:\python\flask_tutorials>python manage.py shell
#我們來看下app有沒有被正確匯入
>>> app
<Flask 'main'>
>>>
總結
現在我們已經搭建了開發環境,可以繼續在Flask裡面實現更高階的特性了。