简单点说,flask可以将多个分支应用注册到主应用,如果取消注册,也不会影响其他程序的运行。
将blu1.py和blu2.py注册到main.py
blu1.py
from flask import Blueprint,url_for blue1=Blueprint("blue1",__name__) @blue1.route("/blue1") def fun(): print(url_for('.fun'))#/prefix1/blue1 return "this is blueprint1"
blu2.py
from flask import Flask, url_for, render_template, Blueprint, redirect blue2=Blueprint("blue2",__name__) @blue2.route("/blue2") def fun(): print(url_for('.fun'))#/prefix2/blue2 return "this is blueprint2" # return redirect('/prefix1/blue1')
main.py
from flask import Flask,render_template,url_for from blu1 import blue1 from blu2 import blue2 app=Flask(__name__) app.register_blueprint(blue1,url_prefix='/prefix1') app.register_blueprint(blue2,url_prefix='/prefix2') @app.route('/') def index1(): print(url_for('index1'))#/ print(url_for('blue1.fun'))#/prefix1/blue1 print(url_for('blue2.fun'))#/prefix2/blue2 return "主页" @app.route('/index') def index(): para=789 s=render_template("index.html",para=para) print(url_for('index'))#/index return s if __name__=="__main__": app.run(host="127.0.0.1",port=8000,debug=True)
在html中反向解析url
<a href=" {{ url_for('blue1.fun') }}">{{ url_for('blue1.fun') }}</a>
设置模版目录
蓝图对象默认的模板目录为系统的模版目录,可以在创建蓝图对象时使用 template_folder 关键字参数设置模板目录
admin = Blueprint('admin',__name__,template_folder='my_templates')
注册静态路由
和应用对象不同,蓝图对象创建时不会默认注册静态目录的路由。需要我们在 创建时指定 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')
蓝图的url前缀
- 当我们在应用对象上注册一个蓝图时,可以指定一个url_prefix关键字参数(这个参数默认是/)
在应用最终的路由表 url_map中,在蓝图上注册的路由URL自动被加上了这个前缀,这个可以保证在多个蓝图中使用相同的URL规则而不会最终引起冲突,只要在注册蓝图时将不同的蓝图挂接到不同的自路径即可
url_for
url_for('admin.index') # /admin/
使用蓝图
蓝图/Blueprint对象用起来和一个应用/Flask对象差不多,最大的区别在于一个 蓝图对象没有办法独立运行,必须将它注册到一个应用对象上才能生效
使用蓝图可以分为三个步骤
from flask import Blueprint
- 1,创建一个蓝图对象
admin=Blueprint('admin',__name__)
- 2,在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模版过滤器
@admin.route('/')
def admin_home():
return 'admin_home'
- 3,在应用对象上注册这个蓝图对象
app.register_blueprint(admin,url\_prefix='/admin')
当这个应用启动后,通过/admin/可以访问到蓝图中定义的视图函数