当前位置:   article > 正文

flask_蓝图_flask注册蓝图

flask注册蓝图

蓝图

1.Blueprint概念

简单来说,Blueprint 是⼀个存储操作⽅法的容器,这些操作在这个Blueprint 被注册到⼀个应⽤之后就可以被调⽤,
Flask 可以通过Blueprint来组织URL以及处理请求。
Flask使⽤Blueprint让应⽤实现模块化,在Flask中,Blueprint具有如下属性:

  1. ⼀个应⽤可以具有多个Blueprint
  2. 可以将⼀个Blueprint注册到任何⼀个未使⽤的URL下⽐如 “/”、“/sample”或者⼦域名
  3. 在⼀个应⽤中,⼀个模块可以注册多次
  4. Blueprint可以单独具有⾃⼰的模板、静态⽂件或者其它的通⽤操作⽅法,它并不是必须要实现应⽤的视图和函数的
  5. 在⼀个应⽤初始化时,就应该要注册需要使⽤的Blueprint
    但是⼀个Blueprint并不是⼀个完整的应⽤,它不能独⽴于应⽤运⾏,⽽必须要注册到某⼀个应⽤中。

2.蓝图使用

蓝图/Blueprint对象⽤起来和⼀个应⽤/Flask对象差不多,最⼤的区别在于⼀个 蓝图对象没有办法独⽴运⾏,必须将它注册到⼀个应⽤对象上才能⽣效

2.1使⽤蓝图可以分为三个步骤

1,创建⼀个蓝图对象

admin=Blueprint('admin',__name__)
  • 1

2,在这个蓝图对象上进⾏操作,注册路由,指定静态⽂件夹,注册模版过滤器

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

3,在应⽤对象上注册这个蓝图对象

app.register_blueprint(admin,url\_prefix='/admin')
  • 1

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

2.2运⾏机制

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

2.3蓝图的url前缀

  1. 当我们在应⽤对象上注册⼀个蓝图时,可以指定⼀个url_prefix关键字参数(这个参数默认是/)
  2. 在应⽤最终的路由表 url_map中,在蓝图上注册的路由URL⾃动被加上了这个前缀,这个可以保证在多个蓝图中使⽤相同的URL规则⽽不会最终引起冲突,只要在注册蓝图时将不同的蓝图挂接到不同的⾃路径即可
  3. url_for
url_for('admin.index') # /admin/
  • 1

2.4注册静态路由

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

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

现在就可以使⽤/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')
  • 1
  • 2

2.5设置模版⽬录

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

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

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/191335
推荐阅读
相关标签
  

闽ICP备14008679号