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
  • 前后端不分离,一般会使用模板引擎,所以会有 templatesstatic 这两个目录。

蓝图(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)

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部