打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
flask深度研究之蓝图和配置加载

以上内容为我自己源码总结,可能存在一些问题。

关于蓝图

蓝图的使用第一步导入flask中的Blueprint对象,并实例化这个对象,然后通过这个对象进行路由的注册,即对象.route(传入的参数)

该过程会调用蓝图对象的add_url_rule(),所传入的参数rule为注册路由的参数,即rule=传入的参数,endpoint暂时为空,并把视图函数的地址值传进去

在add_url_rule()中会调用蓝图对象的record()方法,传入参数为一个匿名函数,

lambda s: s.add_url_rule(rule, endpoint, view_func, **options) 匿名函数的参数一次为add_url_rule()传入的参数

该方法会执行以下代码

self.deferred_functions.append(func)  func为传入的匿名函数,即把该函数存入一个列表

蓝图使用的最后一步,在app对象中注册蓝图

这一步会调用app对象的register_blueprint()方法,app的注册方法会调用蓝图的注册方法 并传入参数 first_registration=True, option为空

蓝图的注册方法会首先调用make_setup_state()得到一个 BlueprintSetupState类  传入参数app为注册蓝图的app对象,以及从上面方法传递过来的参数, 并用一个status变量接收这个类对象

然后会调用这个对象的add_url_rule(),传入的参数rule为静态文件夹名 '/<path:filename>', endpoit为静态文件夹名,视图函数为 self.send_static_file地址值

最后会对deferred_functions这个列表进行遍历,并调用列表中的方法,即注入蓝图路由是传入的匿名函数,参数为status

即调用status.add_url_rule(rule, endpoint, view_func, **options) 参数rule为注册蓝图时传入的参数,option和endpoint为空,view_func为试图函数地址值

status的add_url_rule方法会调用app的add_url_rule,第一个参数rule为加上了前缀的rule参数,第二个参数为'%s.%s' % (self.blueprint.name, endpoint),第三个参数为传递过来的视图函数地址值,第四个参数

defaults默认为一个空字典

app的add_url_rule()方法会进行一些操作,我也没有过多去了解,最终则在view_functions这个字典里加上key为[endpoint],value为视图函数地址值的一条数据

关于配置加载

app.config = self.config =self.make_config(instance_relative_config) = Config()即flask内置的配置类,app.config.from_object()调用配置类的方法

方法内容如下

if isinstance(obj, string_types):            obj = import_string(obj)for key in dir(obj):  if key.isupper():    self[key] = getattr(obj, key)

我们传入的参数obj为自己定义的类所以会直接走for循环

for循环会遍历类中的属性和方法,若方法名或属性名为全部大写,则获取该方法或属性的数据并添加到Config这个字典中去

所以实现了配置的加载

来源:https://www.icode9.com/content-4-305001.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Python基础教程:Flask进击篇——Flask运行流程
Flask中endpoint的理解
Flask 如何在蓝图(blueprint)中访问 app.config|极客笔记
Flask是Python web最火热三大框架之一!给我两小时带你完全入门
python后台Flask 快速入门
框架-flaskの开发
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服