Flask是非常流行的python web 框架
優(yōu)點(diǎn):
非常齊全的官方文檔恨樟,上手非誠(chéng)方便
有非常好的擴(kuò)展機(jī)制和第三方擴(kuò)展環(huán)境
社區(qū)活躍度非常高
Flask主要依賴三個(gè)庫(kù):
JinJa2:默認(rèn)的模板引擎
Werkzeug:一個(gè)包含WSGi劝术,路由计螺,調(diào)試的工具集
Itsdangerous:基于Django簽名模塊的簽名實(shí)現(xiàn)
Web程序和數(shù)據(jù)庫(kù)交互使用SQLAlchemy,MongoEngine,不用ORM(對(duì)象關(guān)系映射)而基于Mysql-python這樣的底層驅(qū)動(dòng)進(jìn)行開(kāi)發(fā)
From flask import Flask ?引入Flask實(shí)現(xiàn)一個(gè)WSGi應(yīng)用
App = Flask(__name__) ?app是Flask的實(shí)例,它接受包或模塊的名字,一般用__name__通過(guò)它去確定根目錄咆槽,以便獲取靜態(tài)文件和模板文件目錄
@app.rount() ????????將url和視圖函數(shù)的關(guān)系保存到app.url_map屬性上
調(diào)試模式
app.debug = True
App.run這樣方式使用于啟動(dòng)本地的開(kāi)發(fā)服務(wù)器秦忿,每次修改要重啟服務(wù)器,進(jìn)入調(diào)試模式后服務(wù)器會(huì)自動(dòng)載入代碼并返回錯(cuò)誤上下文及調(diào)試頁(yè)面
動(dòng)態(tài)url規(guī)則
@app.rount(‘/item/<id>/’)
尖括號(hào)的內(nèi)容是動(dòng)態(tài)的潜秋,凡是匹配到item的url都會(huì)映射到這個(gè)路由上,內(nèi)部的id作為參數(shù)獲得
默認(rèn)是string(int,float,path,uuid,any)
HTTP方法
@app.rount(‘/login’,methods=[GET,POST])
唯一url
@app.rount(‘/projexts/’)
結(jié)尾不帶/會(huì)別重定向到/規(guī)范的url上胎许,會(huì)出現(xiàn)搜索錯(cuò)誤的情況
構(gòu)造url
url_for() 構(gòu)造url ,不直接寫(xiě)url的原因在未來(lái)要更改時(shí)只需改一次钩述,url轉(zhuǎn)移特殊字符時(shí)他會(huì)自己處理
跳轉(zhuǎn)和重定向
Redirect() ?跳轉(zhuǎn)狀態(tài)嗎時(shí)301牙勘,重定向是302
藍(lán)圖
藍(lán)圖(Blueprint)實(shí)現(xiàn)了應(yīng)用的模塊化,讓?xiě)?yīng)用層次清晰方面,開(kāi)發(fā)者便于維護(hù)項(xiàng)目恭金。
使用app.register_blueprint()注冊(cè)模塊,用Blueprint()實(shí)例模塊的變量替代app
模板Jinja2引擎
Jinja是日本寺廟的意思蔚叨,并且寺廟的英文temple和template的發(fā)音相似蔑水。Jinja2是flask默認(rèn)的仿Django的一個(gè)模板引擎,由flask的作者開(kāi)發(fā)丹擎。
優(yōu)點(diǎn):
讓Html設(shè)計(jì)者和后端python開(kāi)發(fā)工作分離
減少使用python的復(fù)雜程度,頁(yè)面邏輯相對(duì)獨(dú)立蒂培,易于維護(hù)
模板非常靈活护戳,快速和安全垂睬,對(duì)設(shè)計(jì)者和開(kāi)發(fā)者更友好
提供了控制語(yǔ)句,繼承等高級(jí)功能驹饺,減少開(kāi)發(fā)的復(fù)雜度
Jinja2是Flask的一個(gè)依賴赏壹,安裝flaks,Jinja2也隨之安裝
{# #} ??模板注釋
{% %} ?用于執(zhí)行for循環(huán)或賦值的語(yǔ)句
{{ }} ??用于把表達(dá)式的結(jié)果輸出到模板上
模板繼承
{% block head%} ??{% endblock%} ??子模板重載
宏(類似于函數(shù))
使用`macro`這個(gè)模板標(biāo)簽創(chuàng)建宏
在真實(shí)的開(kāi)發(fā)中昔瞧,會(huì)將一些常用的宏單獨(dú)放在一個(gè)文件中,在需要使用的時(shí)候硬爆,再?gòu)倪@個(gè)文件中進(jìn)行導(dǎo)入。
例:
{%?import?'forms.html'?as?forms?%}
{%?from?'forms.html'?import?input?as?input_field?%}
{%?from?'forms.html'?import?input?%}
擴(kuò)展:
Mako模板引擎缘圈,性能和Jinja2類似袜蚕,由知名的框架支持牲剃,如Pylons和Pyramid內(nèi)置Mako作為默認(rèn)模板引擎,支持在模板中寫(xiě)原生python凿傅,對(duì)python工程師友好缠犀,Jinja2帶來(lái)的好處是易于維護(hù),使得模板有更好的可讀性聪舒,Mako限制少使得工作更有效率辨液,整個(gè)項(xiàng)目維護(hù)更好。