资讯专栏INFORMATION COLUMN

关于flask蓝图

Lsnsh / 790人阅读

摘要:注册静态路由和应用对象不同,蓝图对象创建时不会默认注册静态目录的路由。

首选:flask蓝图是什么?

flask运行web程序的运行是通过实例化对象app.run()来运行的,那么会出现在一个.py文件里面定义很多的视图函数,即不方便代码管理,又不利于后期的维护.所以在flask出现了蓝图(Blueprint),可以使程序模块化,就像django的一个个模块一样来独立编程。那么这个蓝图(Blueprint)就实现了这个功能。
简单来说,Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。Flask使用Blueprint让应用实现模块化。

在Flask中,Blueprint具有如下属性:

一个应用可以具有多个Blueprint
可以将一个Blueprint注册到任何一个未使用的URL下比如 “/”、“/sample”或者子域名
在一个应用中,一个模块可以注册多次
Blueprint可以多带带具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的
在一个应用初始化时,就应该要注册需要使用的Blueprint
但是一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。

运行机制

蓝图是保存了一组将来可以在应用对象上执行的操作,注册路由就是一种操作
当在应用对象上调用 route 装饰器注册路由时,这个操作将修改对象的url_map路由表
然而,蓝图对象根本没有路由表,当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项
当执行应用对象的 register_blueprint() 方法时,应用对象将从蓝图对象的 defered_functions 列表中取出每一项,并以自身作为参数执行该匿名函数,即调用应用对象的 add_url_rule() 方法,这将真正的修改应用对象的路由表。

蓝图的url前缀

当我们在应用对象上注册一个蓝图时,可以指定一个url_prefix关键字参数(这个参数默认是/)
在应用最终的路由表 url_map中,在蓝图上注册的路由URL自动被加上了这个前缀,这个可以保证在多个蓝图中使用相同的URL规则而不会最终引起冲突,只要在注册蓝图时将不同的蓝图挂接到不同的自路径即可。

注册静态路由

和应用对象不同,蓝图对象创建时不会默认注册静态目录的路由。需要我们在 创建时指定 static_folder 参数。
下面的示例将蓝图所在目录下的static_admin目录设置为静态目录

admin = Blueprint("admin",__name__,static_folder="static_admin")
app.register_blueprint(admin,url_prefix="/admin")

现在就可以使用/admin/static_admin/ 访问static_admin目录下的静态文件了 定制静态目录URL规则 :可以在创建蓝图对象时使用 static_url_path 来改变静态目录的路由。下面的示例将为static_admin文件夹的路由设置为 /lib

admin = Blueprint("admin",__name__,static_folder="static_admin",static_url_path="/lib")
app.register_blueprint(admin,url_prefix="/admin")
设置模版目录

蓝图对象默认的模板目录为系统的模版目录,可以在创建蓝图对象时使用 template_folder 关键字参数设置模板目录

admin = Blueprint("admin",__name__,template_folder="my_templates")

注:如果在templates中存在和my_templates同名文件,则系统会优先使用templates中的文件,在使用templates目录同名的情况下,需要通过路径区分,例如:

my_templates存在两个,若使用admin目录下的my_templates目录,则需要使用如下方式注册:

admin = Blueprint("admin",__name__,template_folder="admin/my_templates")

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42536.html

相关文章

  • flask蓝图的简单介绍

    摘要:蓝图的简单介绍蓝图概念的简单介绍用蓝图的概念来在一个应用中或跨应用制作应用组件和支持通的模式。以前缀和或子域名,在应用上注册一个蓝图。前缀子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数默认情况下。 flask蓝图的简单介绍 蓝图概念的简单介绍:Flask 用 蓝图(blueprints) 的概念来在一个应用中或跨应用制作应用组件和支持通的模式。蓝图很好地简化了大型应用工作...

    shadajin 评论0 收藏0
  • 我的第一本 gitbook: Flask Web 开发笔记

    摘要:月份发布了第版,收到不少网友的良好建议,所以又抽空进行了完善,当然也拖了不少时间。本书主要介绍的基本使用,这也是我一开始在学习过程中经常用到的。第章实战,介绍了如何开发一个简单的应用。声明本书由编写,采用协议发布。 showImg(https://segmentfault.com/img/remote/1460000007484050?w=200&h=152); 书籍地址 head-f...

    KevinYan 评论0 收藏0
  • python大佬养成计划----Flask蓝图

    摘要:使用蓝图的概念来制作应用程序组件和支持应用程序内部或跨应用程序的通用模式。蓝图可以大大简化大型应用程序的工作方式,并为扩展提供了在应用程序上注册操作的中心手段。相反,它是如何构造或扩展应用程序的蓝图。 蓝图 之前我们已经通过代码了解了一些Flask基本的用法,现在出现一个问题,我们要做的功能越来越多,路由是不是都要放在run文件中呢?例如我们在不同的文件都定义了一些路由,如果想要访问他...

    tianyu 评论0 收藏0

发表评论

0条评论

Lsnsh

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<