你真的懂Flask中浅谈蓝图Blueprint吗?

一,什么是Flask中的蓝图Blueprint

  1. Blueprint是用于实现Flask框架中单个应用的视图,模板,静态文件的集合。
  2. Blueprint 是一个存储操作(路由映射)方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求(其实就是实现客户端的请求和URL相互关联的功能)。
  3. 也可以说,Blueprint就是模块化处理的类(但这个说法太笼统)。因为在Flask中使用Blueprint可以让应用实现模块化,并没有体现出类的实质(类的实质就是一种数据类型)。

 

二,为什么要使用蓝图

  随着我们业务代码的增加,会促使我们将所有的代码都放到单个程序文件中,这样会让代码阅读变得困难,给后期维护带来麻烦。

  举栗子:

        你的笔记本电脑有:USB、电源接⼝口、SD卡槽、⽿耳机孔、 HDMI等;  而我的电脑,就只有一个typeC 口(蓝图接口),其他的接口只能通过type-C的扩展坞(在蓝图中添加url规则)再接 到电脑上(注册蓝图)。我下班了,直接拔了那⼀根type-C走人就可以(其实就是取消注册蓝图),而你还要拔四-五根线,这时候你就发现了这根type-C的⽅便,甚⾄当大家某个外接设备一起出问题(业务逻辑需要修改)时,而我只需要在外接设备与那个拓展坞(蓝图中)之间修复,基本上没电脑主程序什么事,因为它降低了其他外接设备与电脑的耦合。

 

三,怎么样使用蓝图  

   1,创建蓝图对象

1 admin=Blueprint('admin' ,__name__)

 

    2.注册蓝图路由

1 @admin.route('/')
2 def admin_home():
3   return 'admin_home'

 

   3. 注册蓝图

1 app.register_blueprint(admin, url_prefix='admin')

 

  当我们这个应用启动后,通过/admin/可以访问到蓝图中定义的视图函数

 

四, 注意事项

  1,蓝图的运行机制:

    a,蓝图是封装好一个将来可以在应用对象上执行的操作,注册路由就是一种操作

    b,当在应用对象上调用 @xx.route 装饰器注册路由时,这个操作将修改对象的url_map路由表

    c,基于b点,大家以为蓝图对象会有路由表。然而,蓝图对象根本没有路由表,当我们在蓝图对象上调用@xx.routeroute装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项

    d,当执行应用对象的 register_blueprint() 方法时,应用对象将从蓝图对象的 defered_functions 列表中取出每一项,并以自身作为参数执行该匿名函数,即调用应用对象的 add_url_rule() 方法,这将真正的修改应用对象的路由表

 

  2,蓝图Blueprint的属性:

     a,一个应用可以具有多个Blueprint

    b,可以将一个Blueprint注册到任何一个未使用的URL下,比如 “/”、“/sample”或者子域名

    c,在一个应用中,一个模块可以注册多次

    d,Blueprint可以单独具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的

    e,在一个应用初始化时,就应该要注册需要使用的Blueprint

    注意:一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。

  3,蓝图的URL前缀:

    当我们在应用对象上注册一个蓝图时,可以指定一个url_prefix关键字参数(这个参数默认是/)

    在应用最终的路由表 url_map中,在蓝图上注册的路由URL自动被加上了这个前缀,这个可以保证在多个蓝图中使用相同的URL规则而不会最终引起冲突,只要在注册蓝图时将不同的蓝图挂接到不同的自路径即可

1 url_for('admin.index') # /admin/

  4,注册静态路由:

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

    所以需要我们在 创建时指定 static_folder 参数。

    以下的示例,将蓝图所在目录下的static_admin目录设置为静态目录

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

 

     b,现在就可以使用/admin/static_admin/ 访问static_admin目录下的静态文件了

    定制静态目录URL规则 :可以在创建蓝图对象时使用 static_url_path 来改变静态目录的路由。

    下面的示例将为 static_admin 文件夹的路由设置为 /lib

1 admin = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib')
2 app.register_blueprint(admin,url_prefix='/admin')

 

  5,设置模板目录:

     蓝图对象默认的模板目录为系统的模版目录

    可以在创建蓝图对象时使用 template_folder 关键字参数设置模板目录

1 admin = Blueprint('admin',__name__,template_folder='my_templates')

  注意:如果在 templates 中存在和 my_templates 同名文件,则系统会优先使用 templates 中的文件

    参考链接:https://stackoverflow.com/questions/7974771/flask-blueprint-template-folder

 

 

笔者有话说:以上内容有多处参考,若未标记清楚出处,还望见谅!
      浅谈了Flask中的蓝图自我的见解,若有错,还请指出。

 

转载于:https://www.cnblogs.com/BUG-Hugo-qing/p/10627809.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值