IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> flask状态保持异常处理请求钩子 -> 正文阅读

[Python知识库]flask状态保持异常处理请求钩子

一、状态保持

状态保持,这里我们使用两种方法 方式来完成。

cookie、session

1、HTTP协议

无状态,

为了解决这个无状态,引入了 状态保持。

状态保持,就是通过工具来让 请求之间可以实现某种联系--资源共享

2、cookie状态保持

  • 设置 cookie 返回

resp.set_cookie()

  • 获取cookie

username = request.cookies.get("username")

# 状态保持---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)

3、session状态保持

cookie状态存储到 客户端的

不安全、cookie存储数据量少

我们希望可以存储到服务器端,这个时候可以使用session机制来完成。

不同的浏览器对应 不同的session 每一个session都有一个唯一的标识 SID

  • 存储数据到session中

存储session之前,需要先设置 秘钥

app.config["SECRET_KEY"] = "1234567890abcdefg"

我们存入session后,session默认会自动在response响应中 写入一个cookie,key就是session value值是 session的ID

session["username"] = username

  • 取session中的数据

    flask会根据 获取的session cookie 获取到 session的ID 然后根据SID去找到session会话缓存区,进而找之前存储的数据。

username = session.get("username")

4、异常处理


abort()抛出异常
flask使用abort进行异常的主动抛出, abort抛出的异常只针对HTTP规定的状态码, 且abort一般不单独使用, 而是配合自定义异常信息进行使用来提高用户体验.

abort 可以中断,并且抛出异常

abort抛出的异常是 HTTP状态码 才可以

abort(500)

对于HTTP状态码的 异常返回,我们可以自定义来完成

  • 自定义

@app.errorhandler(500)
def handler_500_error(error):
 ?  return "<h1>服务器错误,请联系管理员<h1>"
?
?
@app.errorhandler(404)
def handler_404_error(error):
 ?  return "<h1>我找不到回家的路<h1>"
?

自定义了 500响应码、404响应码的 异常返回信息

如果是500错误,则就返回 <h1>服务器错误,请联系管理员<h1>

如果是404错误,则就返回<h1>我找不到回家的路<h1>

5、钩子函数

(1).请求钩子介绍:
flask的请求钩子类似于Django的中间件, flask的请求钩子分为四种, 如下所示:
 ? ?- before_first_request: 请求处理前执行, 只执行一次
 ? ?- before_request: 请求处理前执行, 每次请求处理前都会执行
 ? ?- after_request: 请求处理后执行, 但其是在请求无异常的基础上执行的, 该钩子接受一个参数为响应对象, 并且钩子函数最后需要将参数传递来的响应return返回
 ? ?- teardown_request: 请求处理后执行, 其无论请求是否存在异常都会执行, 该钩子也接受一个参数为异常信息
  • 第一次被访问前,钩子函数

before_first_request

  • 每次被访问前,钩子函数

before_request

  • 每次访问后,钩子函数

after_request

  • 无论是否有异常,都会执行该结果函数

teardown_request

如果要起效果,必须是非调试模式

# 语法示例:
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()

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:47:35  更:2021-10-27 12:48:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:35:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码