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

都说自己写的博客自己也不一定会常看,出了问题互联网上总能找到相关信息。但总知:

辍学,如磨刀之石,不见其损,日有所亏!

故还是记录一下自己的解决方法,既当总结,若能方便他人也甚好。


假设有两个模型,usercustomer, 分别将有关他们的视图函数写在两个不同的文件中:

  • 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 中的相关接口

【参考文章】:flask中使用蓝图将路由分开写在不同文件实例解析

原文地址:https://www.cnblogs.com/zishu/p/11158804.html