Blueprint概念
简单来说,Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。
Flask使用Blueprint让应用实现模块化,在Flask中,Blueprint具有如下属性:
一个应用可以具有多个Blueprint
可以将一个Blueprint注册到任何一个未使用的URL下比如 “/”、“/sample”或者子域名
在一个应用中,一个模块可以注册多次
Blueprint可以单独具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的
在一个应用初始化时,就应该要注册需要使用的Blueprint
但是一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。
使用蓝图的步骤
1,创建一个蓝图对象
2,在这个蓝图对象上进行操作,注册路由
3,在应用对象上注册这个蓝图对象
随着flask程序越来越复杂,我们需要对程序进行模块化的处理,比如将一个功能的许多路由写到另一个文件中(admin.py文件)。以两个python文件为例
源程序app.py文件:
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return 'index'
#3.在应用对象上注册这个蓝图对象
from admin import *
app.register_blueprint(index_blue)
if __name__=='__main__':
app.run()
admin.py文件
#1创建一个蓝图对象
from flask import Blueprint
index_blue = Blueprint("admin",__name__)
#2注册路由
#@app.route('/edit')改为
@index_blue.route('/edit')
def edit():
return 'edit'
"""
其中,第一个参数究竟有什么作用?能否随便命名,或者干脆不命名??
答案是 否定的!!!
解惑:https://blog.csdn.net/os373/article/details/79983620
index_blue = Blueprint("admin",__name__)
两个必要参数'admin'蓝图名字;'__name__'蓝图所在的模块或者包,一般为'__name__'变量
index_blue = Blueprint('admin', __name__, url_prefix='/admin')
#为url添加前缀,url为/admin/edit才能访问edit()函数
index_blue = Blueprint("admin",__name__,static_folder='static_admin')
#访问静态文件。使用/static_admin/*** 访问static_admin目录下的静态文件
index_blue = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib')
#使用 static_url_path 来改变静态目录的路由。 访问路径为/lib/***
index_blue = Blueprint('admin',__name__,template_folder='my_templates')
#设置模板目录
"""