重写蓝图,自定义红图

疑问

1:怎么返回特定文件中的视图函数?如何在一个文件中,调用另一个文件中的函数?先import,再用viewfuntion’endpoint’
2: 如何在app.run之前,先运行完别的文件?放在creat_app函数中,app.route为什么不行?

第一次报404是因为没有注册视图函数,第二次报错是因为循环引入

和endpoint有什么关系?url映射

两次实例化不是同一个对象
蓝图,app,视图函数关系

app,蓝图的初始化工作都可以放在__init__文件中。

如果是蓝图注册,endpoint是web.search。endpoint

这样只是转移了文件,让它可以注册,但是没有实现拆分文件。蓝图不是用来拆分文件,而是模块。比如api,web,cms

为什么用红图?是因为api是一个蓝图,然后版本号是一个红图?

用蓝图

user.api.register(bp_v1, url_prefix='/user'),
前面的bp_v1

问题意识:视图函数向蓝图的注册,在蓝图中,它可以调用自身的add_url方法,而现在我们写红图,却不能调用蓝图的add_url,怎么办?
先把这些参数记录下来,总有一个地方是会碰到蓝图的。

app.register_blueprint最后还是调用了blueprint模块里的register。我的理解是,blueprint与app接口,一是调用app的add_url添加路由,二是让blueprint与app发生关系。把blueprint里的一些参数传给url_map,view_function。

到此便可知道我们通过蓝图注册所有路由state.add_url_rule方法注册到app中。

回到前面BlueprintSetupState中的add_url_rule方法,rule = self.url_prefix + rule表明会在每个rule之前添加url_prefix,这个url_prefix就是前面注册蓝图时指定的。这就是我们实现网页分类功能的基础,对于不同的类别定义不同的蓝图,注册蓝图的时候指定不同的url_prefix,这样不同类别的网页自动的加上了各自的前缀。

self.app.add_url_rule(rule, '%s.%s' % (self.blueprint.name, endpoint),view_func, defaults=defaults, **options)

https://segmentfault.com/a/1190000021673819?utm_source=tag-newest

https://blog.csdn.net/wang6821906/article/details/81437608

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值