Flask蓝图 (Blueprint)
1.蓝图作用
- 一般做测试的时候我们习惯将所有的程序 : 视图函数, 路由, 入口等放在一个 py 文件中
- 但如果视图函数成千上百个, 那是不是会显得运行文件特别乱, 我们是不是应该抽取出来专门的 py 文件来进行管理呢
- 这个时候蓝图就派上用场了, 我们可以利用蓝图对程序目录进行划分
2.不使用蓝图, 手动分文件
- 目录结构
-templates # 模板文件
-views # 视图文件
-__init__.py
-user.py
-order.py
-app.py # 启动文件
app.py
from views import app
if __name__ == '__main__':
app.run()
views/__init__.py
from flask import Flask,request
from . import account # 必须导
from . import order
from . import user
app = Flask(__name__)
views/user.py
from . import app
@app.route('/user')
def user():
return 'user'
views/order.py
from . import app
@app.route('/order')
def order():
return 'order'
3.蓝图基本使用命令
- 导入蓝图
from flask import Blueprint
- 创建蓝图对象
user_bu = Blueprint('user',__name__) # user.py
order_bu = Blueprint('order',__name__) # order.py
- 创建蓝图参数 :
url_prefix
前缀
user_bu = Blueprint('user',__name__,url_prefix='/user',template_folder='views_templates')
# 使用url_prefix参数为访问视图的路径添加一个前缀,可以更加方便的管理视图函数
# 比如之前访问的路径是 : 127.0.0.1:5000/login/
# 那么添加之后访问的路径是 : 127.0.0.1:5000/user/login/
- 创建蓝图参数 :
template_folder
指定templates
# 使用 template_folder 参数给当前蓝图单独使用templates
# 向上查找,当前找不到,会找总 templates 文件夹
- 利用蓝图创建路由关系
@user_bu.route('/login/') # user.py
@order_bu.route('/chaeck_order/') # order.py
- 注册蓝图
app.register_blueprint(user_bu)
app.register_blueprint(order_bu)
4.使用蓝图构建中小型系统目录示例
- 目录结构
-flask_pro
-flask_app
-__init__.py
-static
-templates
-views
-order.py
-user.py
-manage.py
__init__.py
from flask import Flask
app=Flask(__name__)
from flask_app.views import user
from flask_app.views import order
app.register_blueprint(user.user_bu)
app.register_blueprint(order.order_bu)
manage.py
from flask_app import app
if __name__ == '__main__':
app.run(port=8008)
user.py
from flask import Blueprint
user_bu=Blueprint('user',__name__)
@user_bu.route('/login')
def login():
return 'login'
order.py
from flask import Blueprint
order_bu=Blueprint('order',__name__)
@order_bu.route('/test')
def test():
return 'order test'
5.使用蓝图构建大型系统
-
所谓的大型并不是真正的大型, 只是做一个参考, 毕竟我们更愿意使用 Django 去创建大型项目
-
目录结构
│ run.py
│
│
└─pro_flask # 文件夹
│ __init__.py
│
├─admin # admin应用文件夹
│ │ views.py # 视图
│ │ __init__.py
│ │
│ ├─static # 静态资源文件夹
│ └─templates # 模板文件夹
│
└─web # web应用文件夹
│ views.py # 视图
│ __init__.py
│
├─static # 静态资源文件夹
└─templates # 模板文件夹