redprint.py文件
# 模拟蓝图Blueprint源代码编写Redprint
class Redprint:
def __init__(self,name):
self.name = name
self.args = []
#和蓝图route方法一样
def route(self, rule,**options):
def decorator(f):
self.args.append((rule,f,options))
return f
return decorator
# 和蓝图register方法一样
def register(self, bp, url_prefix=None):
prefix = ""
#注册路由路径的前缀部分
if not url_prefix:
url_prefix = '/'+self.name
for rule,f,options in self.args:
endpoint = options.pop("endpoint", f.__name__)
bp.add_url_rule(url_prefix+rule, endpoint, f, **options)
main.py文件
务必注意:api路径=蓝图前缀url_prefix+红图前缀url_prefix+"/register"
最终路由路径为:http:localhost:8099/v1/user_api/register
from flask import Blueprint
from flask import Flask
app = Flask(__name__)
#创建红图对象
user_api = Redprint("user_api")
#把红图注册到蓝图对象中
user_api.register(blueprint_v1,url_prefix="/user_api")
#创建蓝图对象
blueprint_v1 = Blueprint("api", __name__)
#把蓝图对象注册到app中
app.register_blueprint(blueprint_v1, url_prefix="/v1")
#红图api函数
@user_api.route("/register", methods=["POST"])
def register():