重写蓝图,自定义红图
疑问
1:怎么返回特定文件中的视图函数?如何在一个文件中,调用另一个文件中的函数?先import,再用viewfuntion’endpoint’
2: 如何在app.run之前,先运行完别的文件?放在creat_app函数中,app.route为什么不行?
第一次报404是因为没有注册视图函数,第二次报错是因为循环引入
和endpoint有什么关系?
两次实例化不是同一个对象
app,蓝图的初始化工作都可以放在__init__文件中。
如果是蓝图注册,endpoint是web.search。
这样只是转移了文件,让它可以注册,但是没有实现拆分文件。蓝图不是用来拆分文件,而是模块。比如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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!