Flask官方推薦項(xiàng)目結(jié)構(gòu)竟然是這樣
Flask有個(gè)特點(diǎn):千人千面。它沒有硬性規(guī)定,你必須采用哪種項(xiàng)目結(jié)構(gòu)來組織代碼,這就導(dǎo)致每個(gè)人都按照自己的習(xí)慣和喜好來寫,寫出來的項(xiàng)目結(jié)構(gòu)往往是千差萬別。在Flask2.0的官方文檔中,有一節(jié)內(nèi)容介紹了Flask的項(xiàng)目結(jié)構(gòu),我們可以窺探一番。
Mock式結(jié)構(gòu)
Flask是很適合用來做Mock的,比如調(diào)試前端代碼時(shí),后端服務(wù)不一定準(zhǔn)備好了,那么就可以先用Flask模擬后端接口返回?cái)?shù)據(jù)。
Mock式項(xiàng)目結(jié)構(gòu)很簡單,創(chuàng)建一個(gè)文件夾:
- $ mkdir flask-tutorial
- $ cd flask-tutorial
然后在這個(gè)文件夾下面隨便創(chuàng)建一些.py文件,來寫Mock代碼即可。
比如創(chuàng)建一個(gè)hello.py文件:
- from flask import Flask
- app = Flask(__name__)
- @app.route('/hello')
- def hello():
- return 'Hello, World!'
再創(chuàng)建一個(gè)order.py文件:
- from flask import Flask
- app = Flask(__name__)
- @app.route('/order')
- def order():
- return {"id": 123456789}
項(xiàng)目結(jié)構(gòu)如下所示:
- /home/user/Projects/flask-tutorial
- ├── hello.py
- ├── order.py
Project式結(jié)構(gòu)
Flask最正統(tǒng)的用法是寫Web后端服務(wù),相對(duì)于Django來說,F(xiàn)lask的項(xiàng)目結(jié)構(gòu)要簡潔很多,如下所示:
- /home/user/Projects/flask-tutorial
- ├── flaskr/
- │ ├── __init__.py
- │ ├── db.py
- │ ├── schema.sql
- │ ├── auth.py
- │ ├── blog.py
- ├── tests/
- │ ├── conftest.py
- │ ├── data.sql
- │ ├── test_factory.py
- │ ├── test_db.py
- │ ├── test_auth.py
- │ └── test_blog.py
- ├── venv/
- ├── setup.py
- └── MANIFEST.in
- flaskr/ 存放項(xiàng)目主要源文件的包。
- tests/ 存放測(cè)試代碼的目錄。(使用pytest框架來寫)
- venv/ Python虛擬環(huán)境目錄。
- setup.py 項(xiàng)目構(gòu)建信息的描述。
- MANIFEST.in 項(xiàng)目包含或排除其他文件夾的說明。
可以看出來官方并沒有給出flaskr/更為具體的目錄結(jié)構(gòu)設(shè)計(jì)了,項(xiàng)目規(guī)模不同,編程經(jīng)驗(yàn)不一,自由發(fā)揮空間越大,結(jié)構(gòu)差異化就越明顯。這跟Flask的設(shè)計(jì)理念其實(shí)是保持一致的,F(xiàn)lask只提供核心功能,不限制你做什么,把選擇權(quán)交給你自己。
Git忽略文件
如果采用Git對(duì)源代碼進(jìn)行管理,可以配置下面的.gitignore文件:
- venv/
- *.pyc
- __pycache__/
- instance/
- .pytest_cache/
- .coverage
- htmlcov/
- dist/
- build/
- *.egg-info/
把這些文件夾和文件,排除到提交的代碼之外。
參考資料:
https://flask.palletsprojects.com/en/2.0.x/tutorial/layout/
https://blog.csdn.net/cckavin/article/details/97945913