为什么要有蓝图

当flask程序里面视图函数非常多时,我们需要一个目录结构去管理我们的程序,这就需要蓝图去划分结构,方便管理我们的程序

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()

创建并注册蓝图

  1. 创建蓝图

在上面的视图函数文件夹中,分别有​​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'
  1. 注册蓝图
    在创建好蓝图之后,还需要与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