构建红图注册到蓝图中

目标:使用红图的route方法来代替蓝图的route方法。
1.创建视图函数,将视图函数注册到红图中

api = Redprint("user")
@api.route("/get")
def get_user():
    return "视图函数"

2.将自定义的红图注册到蓝图中

def create_blueprint_v1():
    bp_v1 = Blueprint("/v1", __name__)
    book.api.register(bp_v1)
    user.api.register(bp_v1)
    return bp_v1

3.将蓝图注册到flask 核心app中

def register_my_blueprint(app):
    from app.api.v1 import create_blueprint_v1
    app.register_blueprint(create_blueprint_v1(), url_prefix="/v1")

4.创建flask对象,并将蓝图写入app中

def create_app():
    app = Flask(__name__)
    register_my_blueprint(app)
    return app

5.由于红图是自己定义的,所以红图的相关方法需要自己去构建,可以参照蓝图的相关方法来进行创建,需要自己写的方法包括如下几个:
(1)route【第一步中的route路由方法】
(2)register【第二步中的register注册方法】
6.创建方法先去查看蓝图的route方法,蓝图的route方法如下:

    def route(self, rule, **options):
        def decorator(f):
            endpoint = options.pop("endpoint", f.__name__)
            self.add_url_rule(rule, endpoint, f, **options)
            return f
        return decorator

7,仿照着书写我们的方法:

class Redprint:
    def __init__(self, name):
        self.name = name
        self.mound = []

    def route(self, rule, **options):
        def decorator(f):
            self.mound.append((f, rule, options))
            return f
        return decorator

    def register(self, bp, url_prefix=None):
        if url_prefix is None:
            url_prefix = "/" + self.name
        for f, rule, options in self.mound:
            endpoint = options.pop("endpoint", f.__name__)
            bp.add_url_rule(url_prefix + rule, endpoint, f, **options)

注:从蓝图的方法中,可以看出,蓝图可以直接调用它自己的对象,然后使用add_url_rule方法,将传入的数据直接保存在了自己的对象中,但是我们的route方法没有传入蓝图对象,也就无法调用add_url_rule来保存相关参数,所以,我们就先将传入的参数保存使用列表保存下来。并且,因为我们不可能只有一个视图函数,所以为了区分,我们将一个视图函数的rule,f,option用元组封装然后再存入列表中,等到其他方法中有对象时,我们再来遍历将视图参数传入对象中进行保存。
恰好,在register方法中,我们传入了一个bp的蓝图对象,现在就可以直接再次将之前存放在列表中的视图参数通过add_url_rule进行保存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值