Flaskr 有两个蓝图,一个用于认证功能,另一个用于博客帖子管理。每个蓝图的代码 都在一个单独的模块中。使用博客首先需要认证,因此我们先写认证蓝图。
个人自己的理解:蓝图是路由的另一种方式,一个项目中会有很多不同的功能,如果将这些功能的视图写在一个app.py文件里面的话,会显得很臃肿,不易阅读,也不易后期维护。一般来说会根据不同的功能拆分成很多模块,比如用户管理、权限管理、商品管理、库存管理、订单管理等等,每一个模块都有自己对应的一个路由文件,将这些路由注册到一个公共的对象里面去,这个对象可以理解为蓝图,然后再讲蓝图注册到app里面去,也就是flask对象里面去,就完成了视图、客户端、服务器的绑定。通过这种方式,,开发者能够把他们的应用拆分成不同的组件。 在我们的架构中,,蓝图的作用类似于控制器的效果。
创建蓝图前的写法:app.py文件包含多个功能模块的视图
创建蓝图后:
用户管理功能对应的视图文件
apps包下的初始化文件,用于创建创建flask对象,只要其他地方加载这个包下面的文件会自动加载该文件。
app.py文件
从上面对比可以看出,引入蓝图后,启动文件app.py内容就显得很简洁,并且根据功能分成不同的模块,可阅读性强。同一功能的路由以及视图函数都分门别类的存在相应功能的模块中,后期维护,添加,修改内容也更方便,可维护性强。
蓝图的使用步骤分为三步:
@user_bp.route('/')
def user_center():
return render_template('user/show.html', users=users)
对于视图函数而言,还有四种方式根据不同的场景需求在视图函数返回前后做一些定制化的处理来完成业务的开发需求,实现的方式叫做钩子函数。最常见的有以下四种钩子函数,分别是在视图函数处理前,处理后,返回前,对请求做的处理。
before_first_request 第一次请求处理前执行, 后续请求到来不执行, 只执行一次
before_request 每个请求到来前都执行一次
after_request 请求处理后无异常执行该钩子
teardown_request 请求处理后, 无论存在异常与否, 都会执行该请求钩子