点击上方“python学习与大数据分析”关注
在后端api接口开发过程中,通常不会把所有的功能模块接口放在一个文件里,而是将不同的功能模块解耦放在不同的目录文件中。但当前网上的很多flask的入门案例中,仅在同一个文件中列出了一两个简单示例。很多同学对如何实现不同模块的接口接口还有存在疑惑的。
本文将给大家介绍如何实现不同功能模块功能接口的解耦,为了实现解耦的效果,我们需要引入蓝图(blueprint)。
在Python Web开发中,Flask框架是一个轻量级的选择。当项目变得复杂时,我们需要一种方式来组织和模块化我们的代码,以便于管理和维护。这就是Flask中的Blueprint发挥作用的地方。
什么是Blueprint?
Blueprint是Flask的一个特性,它允许我们将一个大的应用划分为更小的、可重用的部分。每个Blueprint都可以包含路由、静态文件、模板以及自定义错误页面等。这样可以使得代码更加整洁,便于管理。
如何创建和注册Blueprint?
首先,我们先创建一个py文件,文件名为auth.py。这个文件中我们主要用来编写登录、认证相关的接口。
在auth.py文件中,我们先导入Blueprint类并创建一个新的蓝图对象。通常我们会在单独的模块中创建Blueprint以实现更好的模块化:
from flask import Blueprint
bp = Blueprint('auth', __name__, url_prefix='/auth')
在这个例子中,我们创建了一个名为auth的蓝图,它的命名空间(__name__)来自于当前模块名,同时我们还为这个蓝图指定了URL前缀/auth。
接下来,我们可以在auth.py文件里的这个蓝图上定义路由和视图函数,就像我们在普通Flask应用中那样:
'''
describe:来自【python学习与大数据分析】公众号的例子
date:2023/12/3
'''
from flask import Blueprint, jsonify
auth_blueprint = Blueprint('auth', __name__, url_prefix='/auth')
def home():
response_data={
"code": 200,
"msg": "来自【python学习与大数据分析】公众号的例子",
"data": {
"data_list": [{'id': 1, 'name': '张三', 'age': 20}, {'id': 2, 'name': '李四', 'age': 21}]
}
}
return jsonify(response_data)
def login():
response_data={
"code": 200,
"msg": "登录成功,来自【python学习与大数据分析】公众号的例子",
"data": {
"token": "55555555555555555555"
}
}
return jsonify(response_data)
现在我们有了一个包含两个路由的蓝图,下一步就是将其注册到Flask应用中,这通常在主程序文件中完成,那么接下来我们要创建系统主入口程序文件main.py,并将刚才登录模块创建的蓝图注册到主入口程序中。
'''
describe:来自【python学习与大数据分析】公众号的例子
date:2023/12/3
'''
from flask import Flask
from auth import auth_blueprint # 导入刚刚创建的蓝图
# 实例化一个Flask对象
app = Flask(__name__)
# 将登录认证模块的蓝图注册到app对象上
app.register_blueprint(auth_blueprint)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
使用多个蓝图
上面的例子,只是创建了一个登录模块的蓝图,但我们的项目中肯定还会涉及到订单模块、客户管理模块或者其他实际项目中的功能模块,这个时候就需要使用多个蓝图。下面我们再创建一个订单模块的文件,命名为order.py。在文件中我们也同样先创建两个接口实例:
'''
describe:来自【python学习与大数据分析】公众号的例子
date:2023/12/3
'''
from flask import Blueprint, jsonify
order_blueprint = Blueprint('order', __name__, url_prefix='/order')
@order_blueprint.route('', methods=['GET'])
def get_order():
'''
获取订单列表
:return:
'''
# TODO: 这里实现订单列表接口,主要查询数据库获取订单列表,并返回给前端。
response_data = {
'code': 20000,
'msg':'success',
'data': [
{
'order_id': 1234567890,
'order_sn': '20231234567890',
'order_status': 1,
'order_amount': 100.00,
}]
}
return jsonify(response_data)
@order_blueprint.route('', methods=['POST'])
def create_order():
'''
创建订单
:return:
'''
# TODO: 这里实现订单创建接口,主要接收前端传递过来的参数校验后生成订单数据,插入数据库后,并返回订单信息。
response_data = {
'code': 20000,
'msg':'success',
'data': {
'order_id': 1234567890,
'order_sn': '20231234567890',
'order_status': 1,
'order_amount': 100.00,
'order_pay_amount': 100.00,
}
}
return jsonify(response_data)
接下来,我们要将订单管理模块的蓝图注册到主应用入口程序文件中:
'''
describe:来自【python学习与大数据分析】公众号的例子
date:2023/12/3
'''
from flask import Flask
from auth import auth_blueprint # 导入刚刚创建的登录模块蓝图
from order import order_blueprint # 导入刚刚创建的订单模块蓝图
# 实例化一个Flask对象
app = Flask(__name__)
# 将登录认证模块的蓝图注册到app对象上
app.register_blueprint(auth_blueprint)
app.register_blueprint(order_blueprint)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
通过上面的例子,我们知道在flask多模块接口开发过程中,如果要实现不同功能模块间解耦,就需要使用到蓝图,然后不同的功能模块创建不同的文件,并在文件中创建蓝图、定义路由、接口功能函数,最后在主入口程序中,将不同模块的蓝图注册到主应用程序中即可。
欢迎感兴趣的小伙伴长期关注、点赞、转发
——END——