• 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)

  • 相关阅读:
    C#when关键字
    sqlite3 — DB-API 2.0 interface for SQLite databases
    Kubernetes(k8s)的Pod控制器DaemonSet详细讲解
    Idea导入maven工程后右键没有Maven选项
    P8197 [传智杯 #4 决赛] 排排队
    [附源码]Python计算机毕业设计Django实验室管理系统
    详解JS的四种异步解决方案:回调函数、Promise、Generator、async/await
    2024050401-重学 Java 设计模式《实战代理模式》
    程序员的颈椎病怎么办?
    qmake内置函数
  • 原文地址:https://blog.csdn.net/No_Name_Cao_Ni_Mei/article/details/139481453