【Flask】(八)蓝图

蓝图单文件使用

作用:模块化开发

使用流程:

  • 创建蓝图对象
  • 使用蓝图装饰视图函数
  • 将蓝图注册到app中

使用蓝图之后,我们就可以将视图函数从主函数中剥离出来,全部放到一个蓝图文件中。

比如,我们先写一个蓝图文件:

from flask import Blueprint

blue = Blueprint("my_blue", __name__)
# 使用蓝图装饰视图函数
@blue.route('/')
def index():
    return 'index'

@blue.route('/add')
def add():
    return 'add'

@blue.route('/delete')
def delete():
    return 'delete'

然后是主函数文件:

from flask import Flask, Blueprint
from demo07_blue import blue
app = Flask(__name__)
app.register_blueprint(blue)

if __name__ == '__main__':
    app.run()

同样,我们也可以新建一个user_blue的用户蓝图文件,创建user_blue蓝图对象,专门存放一些用户相关操作的视图函数,最后在主函数文件中注册。

以包的形式使用蓝图

这种方式更加灵活,每个蓝图都可以有自己的模板文件、静态文件和配置文件等。

首先我们新建一个package叫做user,专门用来处理用户相关的一些操作。创建好后,,里面会自动生成一个__init__.py文件,这个文件负责user模块的初始化。

在__init__.py中添加内容:

from flask import Blueprint
user_blue = Blueprint("user_blue", __name__)
from user import views  # 这句很重要,不然直接返回没有视图函数

然后在user包中新建一个views.py,专门用来存放user的视图函数:

from user import user_blue

@user_blue.route('/')
def index():
    return 'index'

最后在入口文件中注册即可:

from flask import Flask
from user import user_blue
app = Flask(__name__)
app.register_blueprint(user_blue)

if __name__ == '__main__':
    app.run()

循环导包

这是一个典型的错误,编译器报错常显示

ImportError: cannot import name '***'

比如上面的代码中如果出现这样的改动就会导致循环导包:
【Flask】(八)蓝图

在蓝图中添加静态和模板文件夹

user_blue = Blueprint("user_blue", __name__, static_folder='static', url_prefix='/user')

static_folder表示静态文件夹的名字,它的位置在user包中。为了防止与Flask类的static目录混淆,这里加一个url前缀/user,在查询时使用http://127.0.0.1:5000/user/static/img.png即可访问到对应static文件中的静态资源。

同理,也可以创建user包底下的模板文件夹:

user_blue = Blueprint("user_blue", __name__, static_folder='static', url_prefix='/user', template_folder='templates')

这里要注意的是如果app中也设置了templates文件夹,并且有和user中同名的,那么用render_template(’’)渲染时优先渲染app里面的。不过我们一般都是给蓝图设置templates文件夹,app里面并不设置。

上一篇:vue组件样式穿透/deep/ ::v-deep >>>区别


下一篇:scss的混入和继承,以及for,each循环