为什么要有蓝图
当flask程序里面视图函数非常多时,我们需要一个目录结构去管理我们的程序,这就需要蓝图去划分结构,方便管理我们的程序
Flask程序结构
一般是在Pycharm创建项目名之后,再创建一个同名的文件夹(crm),在该文件夹中创建templates和views等文件夹分别存放模板和视图函数,在crm文件夹同级下再创建一个manage.py(也可叫app.py, 名称自取)用于函数的总入口,manage.py
代码如下
from crm import create_app
app = create_app() # 实例化flask对象
if __name__ == '__main__':
app.run()
该代码实际上导入了__init__.py
文件中的create_app
函数,注意名为__init__.py
文件导入其中的函数时,可以不加模块名 ,下面这种导入方法也可以
from crm import __init__
app = __init__.create_app() # 实例化flask对象
if __name__ == '__main__':
app.run()
创建并注册蓝图
- 创建蓝图
在上面的视图函数文件夹中,分别有account.py
与user.py
两个模块,下面分别在这两个模块中创建蓝图,
- user.py代码如下:
from flask import Blueprint
uc = Blueprint('uc',__name__) #创建蓝图
@uc.route('/list') #注意装饰器后面的写法
def list():
return 'List'
@uc.route('/detail')
def detail():
return 'detail'
- account.py代码如下:
from flask import Blueprint,render_template
ac = Blueprint('ac',__name__)
@ac.before_request #在访问路由/login或/logout时会在请求响应前执行x1函数
def x1():
print('ac.before_request')
@ac.route('/login')
def login():
return render_template('login.html')
@ac.route('/logout')
def logout():
return 'Logout'
- 注册蓝图
在创建好蓝图之后,还需要与Flask实例对象进行绑定才能生效,将相关代码写在__init__.py
中,代码如下:
from flask import Flask
from .views.account import ac
from .views.user import uc
def create_app():
app = Flask(__name__)
# @app.before_request #在注册蓝图页面,使用app.before_request装饰,在所有请求响应之前触发x1函数
# def x1():
# print('app.before_request')
app.register_blueprint(ac)
app.register_blueprint(uc,url_prefix='/api') #可以在访问url加前缀
return app