Flask:blueprint
Posted Flask学习笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask:blueprint相关的知识,希望对你有一定的参考价值。
Blueprint
中文翻译
蓝图
但是和我们理解的蓝图不一样,它只是blueprint
的意译.使用蓝图的好处就是可以将不同功能主用的视图函数/类视图放在不同的模块中,可以更加方便的开发和维护.Flask可以更加模块化.
以豆瓣为例,它包含了不同的模块:
用户模块
读书模块
电影模块
....等等
可以创建一个类似的结构,并使用
Blueprint
来实现,文件结构:blueprint_mode
├── app.py
├── blueprint_model
│ └── user_model.py
└── templates
blueprint
创建流程
导入Blueprint:
from flask import Blueprint
创建一个蓝图:例如
user_db = Blueprint('user', __name__, url_prefix='/user')
,第一参数指定蓝图名称,第二个参数与flask中的使用是相同的用于指定静态文件的相对路径,也方便其他三方插件报错时定位问题,第三个参数prefix为这个蓝图指定url前缀,这个前缀会和视图函数/类视图指定的url直接连接起来形成一个有效的url视图函数:也是和Flask的使用一样,使用对应的route装饰器即可
导入蓝图所在的文件夹:
from blueprint_model import user_model
注册蓝图:使用方法
app.register_blueprint(user_db)
即可html模板查找规则:如果创建蓝图时,第二个参数使用的是
__name__
,那么默认的模板文件路径就是项目根目录下的templates
文件夹(Flask实例化时的__name__
),如果不想使用这个templates
文件夹,可以在实例化Blueprint时指定template_folder
参数,那么此时模板文件的查找顺序就是先在templates
文件夹中查找,查找不到时,就会在蓝图文件同级目下template_folder
参数指定的文件夹(Blueprint实例化时的__name__
)中查找静态文件查找规则:如果创建蓝图时,如果第二个参数使用的是
__name__
,那么,在使用url_for('staic',f ilename='xxx')
时,就只会在项目根目录的static
文件夹中查找,如果使用url_for('bluprintName.static', filename='xxx')
就会在蓝图创建时static_folder
参数指定的文件夹中查找url_for反转:反转获取蓝图中的url时,必须加上蓝图名称的前缀,即便是就在该蓝图模块中使用url_for,也要加上蓝图的名称,例如
url_for('blue_name.viewfunc_name')
实现
创建
app.py
from flask import Flask
from blueprint_model import user_model
app = Flask(__name__)
app.config.update({
'DEBUG':True,
'TEMPLATES_AUTO_RELOAD':True
})
@app.route('/')
def hello_world():
return 'Hello World!'
# 用户模块
# 读书模块
# 电影模块
# 注册蓝图
app.register_blueprint(user_model.user_db)
if __name__ == '__main__':
app.run()创建一个
python package
并创建user_mode
#!/usr/bin/env python
# encoding: utf-8
# 用户模块
from flask import Blueprint
# 初始化
"""
Blueprint(
name, 定义一个blueprint的名字
import_name, blueprint package的名字,默认是__name__
static_folder=None, 指定静态模板文件路径
static_url_path=None,
template_folder=None, 指定渲染文件路径
url_prefix=None, 在访问url前统一添加一个参数
subdomain=None, 指定子域名
url_defaults=None,
root_path=None,
cli_group=_sentinel,
)
"""
user_db = Blueprint('user', __name__, url_prefix='/user')
# 定义路由
@user_db.route('/profile/')
def get_profile():
"""http://127.0.0.1:5000/user/profile/"""
return '个人信息页面'
@user_db.route('/profile/update/')
def update_profile():
"""http://127.0.0.1:5000/user/profile/update/"""
return '修改个人信息'
蓝图中设置子域名
app.config.update({
'SERVER_NAME':'kningyuan.com:5000'
})
...
app.run(host='192.168.0.100')# sudo vim /etc/hosts
# 添加
192.168.0.110 kningyuan.com
192.168.0.110 download.kningyuan.com
app.py
from flask import Flask
from blueprint_model import download_model
app = Flask(__name__)
app.config.update({
'DEBUG':True,
'TEMPLATES_AUTO_RELOAD':True,
"SERVER_NAME": "kningyuan.com:5000" # 设置网站主域名
})
@app.route('/')
def hello_world():
return 'Hello World!'
# 注册蓝图
app.register_blueprint(user_model.user_db)
app.register_blueprint(download_model.download_db)
if __name__ == '__main__':
app.run(host='192.168.0.110')
download_model.py
# download下载 blueprint
from flask import Blueprint
download_db = Blueprint('download', __name__, subdomain='download')
@download_db.route('/')
def index():
return 'download index page'
@download_db.route('/download/')
def get_download():
return 'download page'浏览器访问,能正确访问到网址.
http://download.kningyuan.com:5000/
http://download.kningyuan.com:5000/download/
以上是关于Flask:blueprint的主要内容,如果未能解决你的问题,请参考以下文章
Python进阶(四十九)-初识Flask Blueprint
Flask Blueprint AttributeError: 'module' object has no attribute 'name' 错误