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服務
zhangxa@ubuntu:~/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里面實現更高級的特性了。
---------------------