1. 使用蓝图的目的:
结构更加清晰,模块化,可以将相同模块的代码放在同一个文件中,方便管理
2. 基本语法:
-
在蓝图文件中导入
Blueprint
:from flask import Blueprint
-
通过类
Blueprint()
定义蓝图对象 -
在主 app 文件中注册蓝图
app.register_blueprint(蓝图对象)
3. 前缀
在定义蓝图对象时,可以通过指定参数 url_prefix
指定前缀,那么在蓝图下的视图时也要加上这个前缀,如:
```python
from flask import Blueprint
# 创建蓝图
user_bp = Blueprint('user', __name__,url_prefix='/user')
# 定义蓝图(模块)的视图函数
@user_bp.route('/profile/')
def profile():
return '个人中心页面'
@user_bp.route('/setting/')
def setting():
return '个人设置页面'
```
那么可以通过 `/user/profile`来访问 个人中心页面
4. 蓝图的模版文件的查找规则:
-
如果在项目中的
templates
文件夹中有相应的模版文件,就直接使用 -
如果没有找到,就在定义蓝图的模版文件中查找,定义模版文件时,可以是相对路径,相对的是这个蓝图文件的文件夹
5. 蓝图中的静态文件寻找规则
* 在模版文件中加载静态文件,如果使用 `url_for("static",filename="xxx")`的方式,
会在项目的 `static` 文件夹下查找
* 如果使用 `url_for('bp.static',filename='xxx')` 会在 这个蓝图定义的
`static_flolder` 这个文件中查找
6. url_for()
在有蓝图的app中的注意事项:
-
在使用
url_for
反转在蓝图中的视图函数的时候,endpoint
字符串中需要加上蓝图的名字
,比如:url_for('news.list')
得到的是 news 这个蓝图中的 list 这个视图函数的路由 -
即使在 蓝图定义的视图函数中使用,也要指定蓝图的名字
蓝图子域名实现
-
使用蓝图技术
-
在定义蓝图时,可以通过
subdomain
指定 子域名,格式为: 子域名字符串.主域名 -
在主 app 文件中配置
app.config['SERVER_NAEME']
,例如:app.config['SERVER_NAME'] = 'ck.com:5000' # 配置域名
注意:
- IP 地址 没有子域名
- localhost 也没有子域名
-
如果本地测试,需要修改
host
文件,例如:127.0.0.1 ck.com 127.0.0.1 cms.ck.com
域名与子域名都要做映射
网友评论