Python 筆記五:Flask的N種可能性
其實(shí)类垫,F(xiàn)lask框架教程太多培廓,我不能把所有功能都寫一遍,也沒有意義误褪。我也不是計(jì)算機(jī)出身责鳍,寫得也沒他們好。所以這個(gè)筆記從我自己角度出發(fā)兽间,有不同意見請(qǐng)留言历葛。
從我自己的角度出發(fā),我希望一個(gè)微框架嘀略,很容易上手恤溶。Django明顯不合適乓诽,Tornado雖然好,但是要造輪子咒程,所以還是適合一些純計(jì)算機(jī)大神使用鸠天。我們不太適合。
可能一:傳統(tǒng)Flask
入門教程可以參考被翻譯的Flask教程帐姻,英文原文稠集,這是一個(gè)很基礎(chǔ)的教程,運(yùn)用了一些官配的控件卖宠,其中包括jinja模板巍杈,sqlalchemy的ORM:
- flask 主體
- flask-login 登陸驗(yàn)證
- flask-openid 第三方openID驗(yàn)證
- flask-mail 發(fā)送Email
- flask-sqlalchemy 官配ORM
- sqlalchemy-migrate 數(shù)據(jù)庫(kù)遷移
- flask-whooshalchemy
- flask-wtf web表單
- flask-babel JS新語(yǔ)法兼容庫(kù)
- flup python寫的Web Server
這個(gè)教程也有它的局限性忧饭,太老了扛伍。結(jié)合現(xiàn)在的Web趨勢(shì),大家對(duì)Jquery和模板前段框架越來(lái)越不重視词裤,更多是Angular等MVVM框架加上Rest服務(wù)的后端刺洒。所以我的聚焦點(diǎn)在Flask的擴(kuò)展多,適合超快速開發(fā)吼砂,和GIS不謀而合的特點(diǎn)逆航,我更推薦下面一種方式。
可能二:Flask和Angular結(jié)合
運(yùn)用AngularJS和Flask-Restful的組合渔肩,可以參考generator-angular-flask
安裝
和一般Yeoman的generator一樣因俐,首先我們安裝Yeoman:
npm install -g yo
然后安裝generator:
npm install -g generator-angular-flask
安裝完畢,這時(shí)候可以構(gòu)建項(xiàng)目可以輸入yo
然后選擇周偎,或者直接輸入
yo angular-flask
然后創(chuàng)建一個(gè)虛擬環(huán)境python virtualenv.py
抹剩,安裝python的包,./install.sh
for linux install.sh
for windows蓉坎,然后就可以正式開工澳眷。
入門
創(chuàng)建一個(gè)實(shí)體
yo angular-flask:entity [myentity]
同樣數(shù)據(jù)庫(kù)的創(chuàng)建,遷移蛉艾,升級(jí)和降級(jí)可以通過(guò)db_create.py
钳踊,db_migrate.py
,db_upgrade.py
勿侯,db_downgrade.py
來(lái)完成拓瞪。
服務(wù)端 flask/bin/python run.py
for Linux flask/scripts/python run.py
for Windows
客戶端 grunt server
參考angular-flask的Github項(xiàng)目
可能三:Flask和Vue.js結(jié)合
幾經(jīng)周折,我看上了Vue.js的這MVVM框架助琐。由于它輕量易用祭埂,上手極快,結(jié)合了Angular和React的一些優(yōu)點(diǎn)弓柱,如果你懂得Angular沟堡,想上手Vue.js是很輕松的一件事侧但。而且Vue.js是個(gè)中國(guó)人寫的,我對(duì)其產(chǎn)生一種特別的好感航罗,輕量級(jí)的解耦的選擇可以說(shuō)禀横,和flask框架之間有一種特殊的共同點(diǎn)。
這里舉一個(gè)github的例子基于Vue和Flask的免準(zhǔn)考證四六級(jí)成績(jī)查詢粥血,這個(gè)例子簡(jiǎn)潔明了柏锄,將flask作為一種rest服務(wù),可以采用flask + gevent + gunicorn + nginx的部署方式复亏。熟悉flask的同學(xué)一定知道趾娃,在初始化flask,即app = Flask(__name__)
缔御。通過(guò)解釋器去分配對(duì)應(yīng)的路由抬闷,路由中帶有參數(shù)ticket
和username
,并將查詢結(jié)果整理成為json輸出耕突。
@app.route('/GetCetScore/<ticket>/<username>',methods=['POST','GET'])
def get_cet_score(ticket, username):
ct = CetTicket()
try:
result = ct.get_score(ticket, username)
result['ticket'] = ticket
except:
result = {'Status': '0', 'Contact_us': 'wangyuan.info'}
return jsonify(result)
前端則是將每個(gè)頁(yè)面組件化笤成,把對(duì)應(yīng)的的服務(wù)寫在對(duì)應(yīng)的組件當(dāng)中妓灌。詳情參考1簡(jiǎn)單入門和2進(jìn)階[譯]用Webpack構(gòu)建Vue甜孤,可以參考我的Leaflet 筆記四:Vue-leaflet听系。
轉(zhuǎn)載逼裆,請(qǐng)表明出處供常。總目錄Awesome GIS
轉(zhuǎn)載橡庞,請(qǐng)表明出處挪丢。總目錄后端記事本