Flask 基础组件(七):蓝图
1 蓝图资源
蓝图有自己的目录,它的所有资源都在其目录下。蓝图的资源目录是由创建Blueprint对象时传入的模块名”__name__”所在的位置决定的。同时,我们可以指定蓝图自己的模板目录和静态目录。比如我们创建蓝图时传入:
admin_bp = Blueprint('admin', __name__, template_folder='templates', static_folder='static')
这样,该蓝图的模板目录就在”admin/templates”下,而静态目录就在”admin/static”下。当然,其实默认值就是这两个位置,不指定也没关系。我们可以用蓝图对象的”root_path”属性获取其主资源路径,”open_resource()”方法访问主资源路径下的某个文件,比如:
# 假设 current app 在路径 /home/bjhee/flask-app, #这个将会返回 /home/bjhee/flask-app/admin print admin_bp.root_path # 读取文件 /home/bjhee/flask-app/admin/files/info.txt with admin_bp.open_resource('files/info.txt') as f: info = f.read() print info
2 使用蓝图可以分为四个步骤
- 创建一个蓝图的包,例如users,并在
__init__.py
文件中创建蓝图对象
users=Blueprint('users',__name__)
2.在这个蓝图目录下, 创建views.py文件,保存当前蓝图使用的视图函数
@admin.route('/') def home(): return 'user.home'
3 在users/init.py中引入views.py中所有的视图函数
from flask import Blueprint # 等同于原来在 manage.py里面的 app = Flask() users=Blueprint('users',__name__) from .views import *
4 在主应用main.py文件中的app对象上注册这个users蓝图对象
from users import users app.register_blueprint(users,url_prefix='/users')
当这个应用启动后,通过/users/可以访问到蓝图中定义的视图函数
3 运行机制
- 蓝图是保存了一组将来可以在应用对象上执行的操作,注册路由就是一种操作
- 当在app对象上调用 route 装饰器注册路由时,这个操作将修改对象的url_map路由表
- 然而,蓝图对象根本没有路由表,当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项
- 当执行app对象的 register_blueprint() 方法时,应用对象将从蓝图对象的 defered_functions 列表中取出每一项,并以自身作为参数执行该匿名函数,即调用应用对象的 add_url_rule() 方法,这将真正的修改应用对象的usr_map路由表
4 蓝图用于为应用提供目录划分:
小型应用程序文件结构
/
yourapplication
/
yourapplication
/
__init__.py
/
views
__init__.py
admin.py
frontend.py
/
static
/
style.css
/
templates
layout.html
index.html
login.html
...
大型应用程序文件结构
/
yourapplication
__init__.py
/
apps
__init__.py
/
frontend
__init__.py
views.py
/
static
style.css
/
templates
index.html
about.html
...
/
admin
__init__.py
views.py
/
static
style.css
/
templates
list_items.html
show_item.html
...
其他:
- 蓝图URL前缀:xxx = Blueprint('account', __name__,url_prefix='/xxx')
- 蓝图子域名:xxx = Blueprint('account', __name__,subdomain='admin')
# 前提需要给配置SERVER_NAME: app.config['SERVER_NAME'] = 'wupeiqi.com:5000'
# 访问时:admin.wupeiqi.com:5000/login.html
本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/12814265.html