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__)

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

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

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

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

当这个应⽤启动后,通过/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/

2.4注册静态路由

和应⽤对象不同,蓝图对象创建时不会默认注册静态⽬录的路由。需要我们在 创建时指定 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')

2.5设置模版⽬录

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_43751803/article/details/86548709