flask项目结构与蓝图【心得】

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

usp1994

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值