flask 中使用蓝图将路由分开写在不同文件
flask
若想将不同的路由写在不同的文件中(如将 user
对象的相关接口写在一个文件中,将 customer
对象的相关接口写在另一个文件中),可以使用蓝图来实现。
有关蓝图的定义:A Blueprint is a way to organize a group of related views and other code.
更多信息详见:http://flask.pocoo.org/docs/1.0/tutorial/views/#create-a-blueprint
都说自己写的博客自己也不一定会常看,出了问题互联网上总能找到相关信息。但总知:
辍学,如磨刀之石,不见其损,日有所亏!
故还是记录一下自己的解决方法,既当总结,若能方便他人也甚好。
假设有两个模型,user
和 customer
, 分别将有关他们的视图函数写在两个不同的文件中:
-
user_opt.py
from model import User from flask import Blueprint user_opt = Blueprint('user_opt', __name__) # 查(按名字查) @user_opt.route('/query_name/<user_name>', methods=['GET']) def query_by_name(user_name): users = User.query.filter(User.name == user_name).all() return users
-
customer_opt.py
:
from model import Customer from flask import Blueprint customer_opt = Blueprint('customer_opt', __name__) # 查(按 id 查) @customer_opt.route('/query_id/<customer_id>', methods=['GET']) def query_by_id(customer_id): customer = Customer.query.filter(Customer.id == customer_id).first() return customer
新建的 flask
工程均有 manage.py
文件,写好了上面两个接口之后,若想在 flask
运行时可以直接访问不在 manage.py
中的接口,还需要手动将上面写好的两个蓝图进行注册:
-
manage.py
:
from flask import Flask import config from exts import db from user_opt import user_opt from customer_opt import customer_opt app = Flask(__name__) # 注册蓝图,并指定其对应的前缀(url_prefix) app.register_blueprint(user_opt, url_prefix="/user_opt") app.register_blueprint(customer_opt, url_prefix="/customer_opt") # 引入配置文件中的相关配置 app.config.from_object(config) # 配置db db.init_app(app) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run(host="127.0.0.1", port=5000, debug=True)
此时,运行 flask
项目,在浏览器中输入:
http://127.0.0.1:5000/user_opt/query_id/1 # 通过前缀 user_opt 访问 user 中的相关接口
http://127.0.0.1:5000/customer_opt/query_name/xiaoming # 通过前缀 customer_opt 访问 customer 中的相关接口
【参考文章】:
作者:sinatJ
出处:https://www.cnblogs.com/zishu/p/11158804.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通