Session
Flask除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥。
- 设置:session[‘username’] = ‘xxx’
- 删除:session.pop(‘username’, None)
基本使用
1 | from flask import Flask, session, redirect, url_for, escape, request |
第三方session(我喜欢用这种类型)
这里使用Redis类型,首先在虚拟环境安装两个包,分别是pip install redis
和pip install flask-session
1 | from flask import Flask, session, redirect |
蓝图
什么是蓝图
在Flask项目中可以用Blueprint(蓝图)实现模块化的应用,使用蓝图可以让应用层次更清晰,开发者更容易去维护和开发项目。蓝图将作用于相同的URL前缀的请求地址,将具有相同前缀的请求都放在一个模块中,这样查找问题,一看路由就很快的可以找到对应的视图,并解决问题了。
使用蓝图
安装
1 | pip install flask_blueprint |
实例化蓝图
1 | blue = Blueprint('first',__name__) |
注意:Blueprint中传入了两个参数,第一个是蓝图的名称,第二个是蓝图所在的包或模块,
__name__
代表当前模块名或者包名
注册蓝图
1 | app = Flask(__name__) |
注意:注意:第一个参数即我们定义初始化定义的蓝图对象,第二个参数url_prefix表示该蓝图下,所有的url请求必须以/user开始。这样对一个模块的url可以很好的进行统一管理
使用蓝图
1 |
|
注意:这时候访问应该是127.0.0.1:5000/user/
url_for反向解析
1 | url_for(endpoint, 参数名=value) # 如果在路由上没有配置endpoint,第一个参数可以传递"蓝图中定义的第一个参数.函数名" |
1 | from flask import url_for, redirect |
请求扩展(装饰器实现)
- @app.before_request
- @app.after_request
- @app.errorhandler # 状态码错误信息
- @app.before_first_request # 请求来只执行第一次
1 | from flask import Flask |
这个执行流程类似django中间件,可以参考django中间件
中间件
其实Flask也有中间件,Django中也有中间件,但是Flask中的请求扩展就相当于Django中的中间件,而Django中的中间件却不相当于Flask中的中间件
1 | from flask import Flask |