1.模块化
随着flask程序越来越复杂,我们需要对程序进行模块化的处理。flask内置了一个模块化处理的类,即Blueprint
2.Blueprint概念
简单来说,Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。
Flask使用Blueprint让应用实现模块化,在Flask中,Blueprint具有如下属性:
- 一个应用可以具有多个Blueprint
- 可以将一个Blueprint注册到任何一个未使用的URL下比如 “/”、“/sample”或者子域名
- 在一个应用中,一个模块可以注册多次
- Blueprint可以单独具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的
- 在一个应用初始化时,就应该要注册需要使用的Blueprint
但是一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。
3.初识蓝图
蓝图/Blueprint对象用起来和一个应用/Flask对象差不多,最大的区别在于一个 蓝图对象没有办法独立运行,必须将它注册到一个应用对象上才能生效
使用蓝图可以分为三个步骤
3.1 创建一个蓝图对象
admin=Blueprint('admin',__name__)
3.2 在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模版过滤器
@admin.route('/admin')
def admin():
return 'admin_home'
3.3 在应用对象上注册这个蓝图对象
app.register_blueprint(admin,url_prefix='/admin')
当这个应用启动后,通过127.0.0.1:5000/admin/
可以访问到蓝图中定义的视图函数
4.示例:
例如新增网站后台管理模块:
- 1 新创建一个python package——admin
- 2.admin模块里含有一个__init__.py文件,再新建一个views.py用来编写视图函数。在__init__.py中新建蓝图并从当前目录引入views进行关联。
# 导入蓝图模块
from flask import Blueprint
# 创建蓝图对象
admin_blu = Blueprint("admin", __name__)
# 引入关联的视图模块
from . import views
- 3 在views里面编写具体视图函数
# 使用蓝图名.route装饰视图函数
@admin_blu.route('/login', methods=["GET", "POST"])
def login():
# 用户登录具体视图
return "login success!"
-4 在创建app应用时,注册蓝图。其中url_prefix为添加前缀的参数
# 导入蓝图
from info.modules.admin import admin_blu
# 注册蓝图
app.register_blueprint(admin_blu, url_prefix="/admin")