一、状态保持
1.1 Cookie实现方式
# 状态保持---cookie
(1).cookie的设置
resp = make_response('cookie 测试')
resp.set_cookie('ck','rengongzhineng', max_age=60)
# ck为键, 'rengongzhineng'为值, max_age为cookie过去时间
return resp
(2).cookie的获取: 获取需要从request对象进行获取
cookie_info = request.cookies.get('ck')
(3).cookie设置与获取示例:
from flask import Flask
from flask import request
from flask import make_response
app = Flask(__name__)
@app.route('/set')
def set_ck():
# 创建响应对象
resp = make_response('自定义的响应字符串')
# 设置cookie
resp.set_cookie('ck', 'rengongzhineng', max_age=60)
return resp
@app.route('/get')
def get_ck():
# 从request对象获取cookie
cookie_info = request.cookies.get('ck')
return cookie_info
if __name__ == '__main__':
app.run(debug=True)
1.2 Session实现方式
# 状态保持---session
(1).session的设置
session['key'] = 'value'
# 注意: 使用session前, 必须设置SECRET_KEY配置信息
(2).session的获取
session_info = session.get('key')
(3)session设置与获取示例:
from flask import Flask
from flask import session
app = Flask(__name__)
# 设置SECRET_KEY配置信息, 必须项, 否则抛异常
app.config['SECRET_KEY'] = 'sfjsl35@#$@#sdkjf0934FHJNJGI'
@app.route('/set')
def set_sn():
# 设置session信息
session['name'] = 'jeremy'
return 'session 设置'
@app.route('/get')
def get_sn():
# 获取session信息
session_info = session.get('name')
return '获取到的session信息为: {}'.format(session_info)
if __name__ == '__main__':
app.run(debug=True)
二、异常处理
2.1 abort主动抛出异常
# 异常处理 (1).abort()抛出异常 flask使用abort进行异常的主动抛出, abort抛出的异常只针对HTTP规定的状态码, 且abort一般不单独使用, 而是配合自定义异常信息进行使用来提高用户体验
2.2 异常处理函数
# abort()抛出异常配合自定义异常信息示例
from flask import Flask
# 导入abort
from flask import abort
app = Flask(__name__)
@app.route('/index')
def index():
ret = 111
# 进行异常处理
try:
ret = 100/0
except:
# 当发生异常, 则主动抛出500状态码的异常
abort(500)
return 'ret的值为: {}'.format(ret)
# 自定义异常处理方式, 装饰器参数500承接abort(500)抛出的异常状态码500, 处理函数必须接受一个e参数
@app.errorhandler(500)
def err_500(e):
# 返回异常信息
return '服务器罢工了, 请稍后访问吧!'
if __name__ == '__main__':
app.run(debug=True)
三、请求钩子
3.1 请求钩子的概念与分类
# 请求钩子
(1).请求钩子介绍:
flask的请求钩子类似于Django的中间件, flask的请求钩子分为四种, 如下所示:
- before_first_request: 请求处理前执行, 只执行一次
- before_request: 请求处理前执行, 每次请求处理前都会执行
- after_request: 请求处理后执行, 但其是在请求无异常的基础上执行的, 该钩子接受一个参数为响应对象, 并且钩子函数最后需要将参数传递来的响应return返回
- teardown_request: 请求处理后执行, 其无论请求是否存在异常都会执行, 该钩子也接受一个参数为异常信息
3.2四种请求钩子的使用
# 语法示例:
from flask import Flask
from flask import abort
app = Flask(__name__)
@app.route('/index')
def index():
print('index视图执行了')
# print(90/0)
return 'index page'
# 第一次请求处理前执行, 后续请求到来不执行, 只执行一次
@app.before_first_request
def bfr():
print('before first request run')
# 每个请求到来前都执行一次
@app.before_request
def br():
print('before request run')
# 请求处理后无异常执行该钩子
@app.after_request
def ar(res):
print('after request run')
return res
# 请求处理后, 无论存在异常与否, 都会执行该请求钩子
# 注意: 该钩子必须接受一个异常信息形参
@app.teardown_request
def tr(e):
print('teardown request run')
if __name__ == '__main__':
app.run()