flask 项目没有标准的项目结构,合理组织,确保能跑,可配置,可拓展、模型可被发现就行。
一般可以分为两种
-
按模型(业务)划分
-
按功能划分,就是api、models、config、db、service等
按模型(业务)划分
project /|-- user /| |-- __init__.py # 主路由及自路由注册| |-- apis.py # 用户相关接口| |-- models.py|-- testcase /| |-- __init__.py # 暴露内部的模型| |-- apis.py # 模型基础类| |-- models.py # 用户相关模型|-- config.py # 数据库、插件等配置|-- app.py # 应用创建及启动
按功能划分
project /|-- apis /| |-- __init__.py # 主路由及自路由注册| |-- base.py # 接口基础配置| |-- user.py # 用户相关接口| |-- testcase.py|-- models /| |-- __init__.py # 暴露内部的模型| |-- base.py # 模型基础类| |-- user.py # 用户相关模型| |-- testcase.py|-- config.py # 数据库、插件等配置|-- app.py # 应用创建及启动
在实际开发过程中,web项目可分为
- 前后端分离 会有一个路由
routes
暴露出来 ,也可能叫api
。 - 前后端不分离,一般会使用模板引擎,所以会有
templates
和static
这两个目录。
蓝图(Blueprint)介绍
在 flask
中,路由有一个嵌套功能,用来管理路由与视图函数关系。
Blueprint('api', __name__, url_prefix='/api')
每个蓝图里面包含 路由 、 视图函数、模板文件、静态文件等。可以按业务划分蓝图,也可以按功能划分蓝图。- 蓝图还能嵌套蓝图 。
其实就是类比于 express
中的路由前缀区分模块。只是更灵活,可以多层嵌套
from flask import Flask, Blueprint , url_for , redirect
app = Flask(__name__)api_bp = Blueprint('api', __name__, url_prefix='/api') # 接口根路由(蓝图)
user_bp = Blueprint('user', __name__, url_prefix='/user') # 用户接口路由(蓝图)@user_bp.route('/list')
def user_list():'''最终接口地址为 /api/user/list:return: 用户列表'''return "用户列表"@app.route("/")
def main():user_list_url = url_for('api.user.user_list')return redirect(user_list_url)# 注册用户接口路由(蓝图)到api
api_bp.register_blueprint(user_bp)
# 注册主接口路由(蓝图)到app,这里的顺序,一定要注意,app注册蓝图一定要放到最后面,否则嵌套不生效
app.register_blueprint(api_bp)if __name__ == "__main__":app.run(host="0.0.0.0",port=5611,debug=True)
注意点:嵌套路由时,根路由蓝图注册一定要放到所有 注册蓝图 的最后面,不然嵌套路由会失效。
app.register_blueprint(xxx_bp)