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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++期末复习总结(2)

目录 1.运算符重载 2.四种运算符重载 (1)关系运算符的重载 (2) 左移运算符的重载 (3)下标运算符的重载 (4)赋值运算符的重载 3.继承的方式 4.继承的对象模型 5.基类的构造 6…

易飞销货单出货时审核库存检查

公司接到一客户因品种多而数量少,单一出货计划行比较多,而只上了生产ERP易飞,审核时经常会出现倒催货,提前做销售单,行数有时超30行以上,审核跳窗报错时也不方便查找,特写一外挂程序&#xff0c…

How to: Build a Custom End-User Skin Selector

This section explains how to populate a ComboBoxEdit control with DevExpress skin items. 本节介绍如何使用DevExpress皮肤项填充ComboBoxEdit控件。 To populate a combo box editor, iterate through the SkinManager.Skins collection, which returns all currently a…

字母异位词分组(charyw)

字母异位词分组 题目描述 给定一个字符串数组&#xff0c;将字母异位词组合在一起。字母异位词指字母相同&#xff0c;但排列不同的字符串。 输入格式 第一行正整数n&#xff0c;表示有n个字符串(1<n<1000) 第二行n个字符串&#xff0c;空格隔开 输出格式 多组字母…

Linux基础指令网络管理002

Linux网络管理涉及配置、监控和维护网络接口、路由、防火墙规则、网络服务等&#xff0c;本章主要讲述如何查看网络接口以及管理网络连接。 操作系统&#xff1a; CentOS Stream 9 操作步骤&#xff1a; 查看网络接口及ip信息 指令ipconfig ,如果不能使用该命令先下载 yum …

Qt程序发布工具windeployqt.exe所带来的坑

一、使用Qt自带的发布工具&#xff1a;windeployqt.exe来自动查找运行时库文件&#xff0c;是个好办法。但是该工具有坑&#xff01;并且坑很深&#xff01;我在发布程序时就遇到了一个大坑&#xff01;我使用该工具进行程序发布&#xff0c;自动查找运行时库文件&#xff0c;看…

【c语言】自定义类型----结构体

结构体是c语言的一种自定义类型&#xff0c;自定义类型对于开发者及其重要的类型&#xff0c;它可以随意由开发者进行谱写功能&#xff0c;而今天的结构体可以用来表示一种变量的单个或多种具体属性&#xff0c;再编写代码时有着不可替代的作用&#xff01;&#xff01;&#x…

一个简单的消息队列

目录 原理 实现代码 示例 原理 消息队列是一个先进先出栈&#xff0c;每次都处理第一项&#xff0c;处理完了过后会删除这个消息&#xff0c;这是一个简单的消息队列图&#xff1a; 实现代码 首先消息队列需要一个队列&#xff0c;我们用Python里的列表&#xff1a; self.…

常见的api: BigInteger

一.获取一个大的随机整数 1.代码: BigInteger bd1 new BigInteger(4, new Random());System.out.println(bd1); 2.打印的结果:2 3.注释获取的是0-16之间的随机整数 二.获取一个指定的大的数 1.代码&#xff1a; BigInteger bd2 new BigInteger("100");System.o…

mybatis离谱bug乱转类型

字符串传入的参数被转成了int&#xff1a; Param("online") String online<if test"online 0">and (heart_time is null or heart_time <![CDATA[ < ]]> UNIX_TIMESTAMP(SUBDATE(now(),INTERVAL 8 MINUTE)) )</if><if test"…

人工智能--教育领域的运用

文章目录 &#x1f40b;引言 &#x1f40b;个性化学习 &#x1f988;体现&#xff1a; &#x1f988;技术解析&#xff1a; &#x1f40b;智能辅导与虚拟助手 &#x1f988;体现&#xff1a; &#x1f988;技术解析&#xff1a; &#x1f40b;自动评分与评估 &#x1f…

【react】useEffect 快速上手

useEffect 快速上手 useEffect(setup, dependencies?) 可以接收两个参数&#xff0c;分别是回调函数与依赖数组. useEffect 用什么姿势来调用&#xff0c;本质上取决于你想用它来达成什么样的效果。下面我们来简单介绍 useEffect 的调用规则。 每一次渲染后都执行的副作用&a…

国内拉取国外镜像方法

参考&#xff1a; https://mp.weixin.qq.com/s/-bDrC63J52oSEcIfGcQ7pw 1. github创建仓库 images-sysncer 2. 在此仓库中创建目录 .github/workflows 3. 在此目录中创建文件 sync-image-example.ymlvim sync-image-example.yml name: Sync Image to Aliyun Exampleon:pus…

植物大战僵尸杂交版最新2.0.88手机+电脑+苹果+修改器

在这个充满奇妙的平行宇宙中&#xff0c;植物和僵尸竟然能够和谐共存&#xff01;是的&#xff0c;你没听错&#xff01;一次意外的实验&#xff0c;让这两个看似对立的生物种类发生了基因杂交&#xff0c;创造出了全新的生物种类——它们既能够进行光合作用&#xff0c;也具备…

从零手写实现 nginx-11-文件处理逻辑与 range 范围查询合并

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

C语言中memset()以及memcpy()函数使用方法

memset( ) 在函数memset&#xff08;void *A&#xff0c;int B&#xff0c;int C&#xff09;&#xff1b;语句中&#xff0c;程序完成了将A指针指向的内容开始往后的C个字节内容置为B。 例如下列函数&#xff0c;最终结果是&#xff1a;cps数组内容为&#xff1a;2222222222…

2024年【R2移动式压力容器充装】考试技巧及R2移动式压力容器充装复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 R2移动式压力容器充装考试技巧参考答案及R2移动式压力容器充装考试试题解析是安全生产模拟考试一点通题库老师及R2移动式压力容器充装操作证已考过的学员汇总&#xff0c;相对有效帮助R2移动式压力容器充装复审考试学…

Linux 35.5 + JetPack v5.1.3@RACER编译安装

Linux 35.5 JetPack v5.1.3RACER编译安装 1. 源由2. 编译&安装Step 1&#xff1a;依赖库安装Step 2&#xff1a;LKH-3安装Step 3&#xff1a;建立工程Step 4&#xff1a;编译工程Step 5&#xff1a;安装工程 3. 问题汇总3.1 组件ros-noetic-multi-map-server问题3.2 swarm…

监控系统如何选择交换机

一、基础知识 01 摄像机码流 选择交换机前&#xff0c;首先要弄清楚每路图像占用多少带宽&#xff0c;而这个就是码流。 02 摄像机的数量 要弄清楚交换机的带宽容量。常用交换机有百兆交换机、千兆交换机。它们的实际带宽一般只有理论值的 60~70% &#xff0c;所以它们端口的可…

记录:linux桌面管理基础-X11协议(X window system)

1、认识X11 X11是X协议&#xff0c;版本号为11。X协议是专门被设计为linux桌面管理服务的&#xff0c;而linux桌面环境不像windows那样作为系统内核的一部分&#xff0c;作为一个普通程序运行在用户态上。该协议的设计初衷是为了linux的图形界面满足跨平台、跨网络、与具体硬件…