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 中的相关接口
【参考文章】: