状态保持,异常处理与请求钩子

一、状态保持

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值