一,蓝图的初步使用
flask框架自带的模块Blueprint,Blueprint 是一个存储操作方法的容器,它相当于一个缩小版的app应用,但是一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。
蓝图的作用:解耦,模块化开发
未使用蓝图前:所有的视图模块都在一个文件里面
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world'
@app.route('/user')
def user():
return 'user model'
@app.route('/cart')
def cart():
return 'cart model'
if __name__ == '__main__':
print(app.url_map)
app.run(debug=True)
使用蓝图(如抽离出user模块):
1.新建一个user.py文件, 创建蓝图对象
from flask import Blueprint
"""蓝图对象可看做一个缩小版的app对象"""
bp = Blueprint('user_bp', __name__) # 第一个参数为蓝图名称,随便取
@bp.route('user/')
def user():
return 'user model'
2.在原文件中导入蓝图并将其注册到app中
from flask import Flask
from user import bp
app = Flask(__name__)
app.register_blueprint(bp)
@app.route('/')
def index():
return 'hello world'
注册完之后便可通过url访问到视图函数啦
二:在实际开发过程中蓝图的目录结构
前面仅仅使用了一个py文件来编写用户模块,但是蓝图也可以有自己的静态文件和模板,它可以有更丰富的功能和更分明的功能模块。因此可一创建一个包来存放单独的模块,目录结构如下
最后在app所在的index.py文件中导入和注册蓝图即可
三、目录的扩展
蓝图可以有自己的静态文件夹和模板文件夹
在cart模块下面再创建一个自己的静态文件夹static和模板文件夹templates,templates指定为模板文件夹并指定模板语言为Jinjia2,此时应指明蓝图对象的其他几个参数,如图
附:一般只在程序主目录放静态文件和模板文件即可,简单清晰,蓝图模块不在建立这两个文件以免文件目录结构冗余复杂