读狼书,重温flask
最近做個(gè)簡(jiǎn)單的MIS系統(tǒng), 趁機(jī)讀《flask web 開發(fā)實(shí)戰(zhàn) 入門、進(jìn)階與原理解析》 李輝。 由于是flask官方團(tuán)隊(duì)的人寫的。方方面面都很細(xì)致。
很多寫法、配置,和之前0.X時(shí)代也有了不同。正好整理一下。
打破書里的順序,把自己不熟的地方摘記出來,隨寫隨改。
因?yàn)槲椰F(xiàn)在都是前后分離的寫法了,所以涉及template, form的知識(shí)點(diǎn)就略過了。
感覺需要注意的點(diǎn)有些瑣碎。或者說自己之前學(xué)的也都是一鱗半爪,結(jié)果到處是洞。
所以按自己歸納的topic統(tǒng)一整理一下。
隨著整理,也對(duì)框架的輕和重有了新的認(rèn)識(shí)。
后端django和flask作為對(duì)比,前端angular和手工寫頁(yè)面作為對(duì)比。
——怎么說呢,各種瑣碎細(xì)致的配置一頓搞下來。記憶學(xué)習(xí)負(fù)載肯定是大的。
1 輕量級(jí)的框架,開發(fā)起來記憶學(xué)習(xí)成本并不輕。
輕量級(jí)的框架,本身很"微",但是要配置到工作狀態(tài),其實(shí)要做大量配置工作。使用過程并不輕。
遠(yuǎn)比django這樣的全家桶,開箱即用的框架,要麻煩些。(甚至從項(xiàng)目路徑結(jié)構(gòu),文件名,blueprint名字,擴(kuò)展如何引用,都要“學(xué)”+“按套路來”),這些都是成本
就好比,高手用輕劍,那是因?yàn)樗麅?nèi)力高。低手如果要降低對(duì)擼代碼的恐懼,培養(yǎng)興趣,無腦出活,其實(shí)還是用6管斯特林 似的 全家桶框架更好。
2 輕量級(jí)框架付出更多“概念”成本,是為了換來靈活性
為了全方位的可定制。類似《Unix編程藝術(shù)》里說的“從頭到腳的靈活性”。——和unix一樣,這對(duì)后端,尤其重要。
3 重型框架付出更多的“概念”成本,是為了換來同質(zhì)性。
用angular這樣的重型框架,也同樣會(huì)學(xué)習(xí)不少概念。這樣的目的是獲得面向?qū)ο蟮暮锰帲?ldquo;一切XX皆可以按YY來操作”。
恰恰屏蔽掉了“部署平臺(tái)”,等等的靈活性,交給框架了。
4 非核心域用重型框架,核心域用輕型框架
到底用什么框架,還是要根據(jù)
1工作本身特點(diǎn)
2 自己對(duì)自己工種、職業(yè)定位
2方面綜合考慮。
從工作本身角度說:
1重型框架是通解;
2輕型框架是特解,有可能得到最優(yōu)解;
所以:我的選擇是:
非核心工作,用重型框架;
重型框架的好處:擼代碼容易,效率高,便于多人協(xié)作,千人一面(濫竽充數(shù))。
重型框架的壞處:會(huì)更限制自己的思維到MVC或MVT 或MVXX...,而且有可能模糊業(yè)務(wù)層 寫成強(qiáng)耦合 系統(tǒng),參看rails, django, phoenix,你們錯(cuò)了
但是是不是強(qiáng)耦合 要考發(fā)展階段,項(xiàng)目復(fù)雜度是慢慢成長(zhǎng)起來的。很多小項(xiàng)目,使用重型框架盡快搞出來,并沒有問題。80%并沒有機(jī)會(huì)真的繼續(xù)演化成復(fù)雜項(xiàng)目。
當(dāng)20%的項(xiàng)目真的有機(jī)會(huì)復(fù)雜起來,那時(shí)候重構(gòu)不遲。可以M V C 分別用輕量框架定制開發(fā)。
這也屬于“不要過早優(yōu)化”了吧。
比如,我不是前端開發(fā)者,也不想往那個(gè)方向發(fā)展,那么前端寫響應(yīng)式頁(yè)面,就用angular這樣的重型框架。替我包辦了N多細(xì)節(jié),前端關(guān)心的那些邊角問題不是我關(guān)系的核心問題(比如打包尺寸,響應(yīng)時(shí)間之類的)。和我用u3d一樣。
從個(gè)人角度說:
非個(gè)人興趣方向,非自己的核心域,用重型框架和通解
自己的核心域,要盡量保證靈活性,也要盡量對(duì)自己提出高要求,
即使以重型框架入門,也不要滿足,要及時(shí)切換到輕量框架,然后不斷演化,不斷折騰。
如果是針對(duì)業(yè)務(wù)建模與切分領(lǐng)域,那么后端web server 用flask是個(gè)很好的切入點(diǎn)。
因?yàn)閜y本身就是膠水,其他語(yǔ)言實(shí)現(xiàn)的領(lǐng)域模型,都可以在這里粘合中轉(zhuǎn),那么flask的靈活性確實(shí)就是必要的。
現(xiàn)在僅僅把flask當(dāng) rest api 來用。配合nodejs寫gateway,實(shí)現(xiàn)領(lǐng)域邏輯的分解。
而前端頁(yè)面用angular,能實(shí)現(xiàn)相當(dāng)?shù)腸ontroller工作+全部的view工作。還是很好用的。
未分類
flask并不是mvc框架
,沒有內(nèi)置數(shù)據(jù)模型。P25
flask的view 相當(dāng)于Controller function
jinja2的html template 相當(dāng)于MVC的View
SQLAlchemy 相當(dāng)于 Model
一、配置與啟動(dòng)
1用 flask run啟動(dòng)。 P14
而不是 在 app.py里
if __name__ == '__main__':
app.run()
flask會(huì)自動(dòng)發(fā)現(xiàn)app.py和wsgi.py 從中尋找app或者application變量。
使用其他模塊名,則需要設(shè)置環(huán)境變量,因?yàn)槲抑皇褂胊pp.py,所以不管其他。
P18
flask run --host=0.0.0.0 --port=8000
也可以寫在環(huán)境變量里
FLASK_RUN_HOST
FLASK_RUN_PORT
2 環(huán)境變量管理 P16
安裝python-dotenv。然后用.env文件管理環(huán)境變量
用.flaskenv管理敏感信息,不提交的git倉(cāng)庫(kù)。所以要把.flaskenv添加到.gitignore里
3 多種環(huán)境區(qū)分 P18
FLASK_ENV 默認(rèn) production 開發(fā)是可以設(shè)置為development。開啟開發(fā)特性
默認(rèn)是:
$ flask run
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
改成dev后是:
$ flask run
* Environment: development
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: 824-830-318
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
這才是原來熟悉的debug模式, 修改代碼會(huì)自動(dòng)reload
二、結(jié)構(gòu)組織,blueprint
三、db以及初始化
總結(jié)
以上是生活随笔為你收集整理的读狼书,重温flask的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ruby实例方法和类方法的简写
- 下一篇: 利用peerjs轻松玩转webrtc