Flask - 蓝图
概念
- 如果项目很大,不写在单独一个py文件里,此时需要蓝图;蓝图提供了一种组织python packages的方式
- 蓝图为应用提供模块化,划分目录。
- 一个蓝图代表一个包(package,init,可以查看flasky的例子),有自己的templates, static等等。。多个蓝图组成大型程序
一. 蓝图URL前缀
xxx = Blueprint('account', name,url_prefix='/xxx'),那就不用在每个@app.route里写完整的url,例如@app.route('/acc/login'),@app.route('/acc/logout')。只要xxx = Blueprint('account', name,url_prefix='/acc'),@app.route('/login'),@app.route('/logout')即可。
二. 蓝图子域名
xxx = Blueprint('account', name,subdomain='admin')
前提需要给配置SERVER_NAME: app.config['SERVER_NAME'] = 'xxx.com:5000'
访问时:admin.xxx.com:5000/login.html
三. 示例程序
注册蓝图在项目的__init__.py里,单个蓝图是在模块里的__init__.py或单个模块文件xxx.py
https://github.com/janetat/Flaskii/tree/master/Blueprint_simple
https://github.com/janetat/Flaskii/tree/master/Blueprint_complicated
四. 蓝图中的请求扩展(请求扩展看随笔)
可以针对app写全局的请求扩展(全部蓝图有效),例如在views文件夹里的__init__.py写
@app.before_request
def process_request(*args, **kwargs):
print('来了')
也可以针对某个蓝图写(单个蓝图有效),例如在views文件夹下的account.py写
@account.before_request
def process_request(*args, **kwargs):
print('来了')