flask框架之after_request的用法

一:被装饰的函数必须传递一个参数,这个参数用来接收,视图函数的返回值

不加参数报错:

@app.after_request
def handler_after_request():
    return jsonify({"a":1})

# 错误提示
TypeError: handler_after_request() takes 0 positional arguments but 1 was given

 

加参数

@app.after_request
def handler_after_request(response):
    return jsonify({"a":1})

# 返回
{"a":1}

 

二:参数的说明

视图函数的返回值有多个属性,且为Response Objects对象。官方文档里面的解释是:

The response object that is used by default in Flask. Works like the response object from Werkzeug but is set to have an HTML mimetype by default. 
Quite often you don’t have to create this object yourself because make_response() will take care of that for you.
默认情况下在Flask中使用的响应对象。工作方式类似于Werkzeug中的response对象,但默认设置为具有HTML mimetype。通常您不必自己创建此对象,因为make_response()将为您处理这些问题。

 

属性1:headers

复制代码
@app.after_request
def handler_after_request(xx): 
    print(xx.headers)
    return jsonify({"a":1})

# 打印结果
GET / HTTP/1.1  200 
Content-Type: text/html; charset=utf-8
Content-Length: 232


Content-Type: text/html; charset=utf-8
Content-Length: 232
复制代码

 

属性2:status

200 OK

属性3:status_code

200

属性4:data,处理返回值,可以假如判断条件,处理不同的返回值

复制代码
@app.after_request
def handler_after_request(xx):
    print(xx.data)
    print(xx.data.decode("utf-8"))
    return_str = xx.data.decode("utf-8")
    return_dict = eval(return_str)
    if return_dict.get("code") == 0:
        return jsonify({"return":"ok"})
    else:
        return jsonify({"return":"fail"})


# 打印结果
b'{"code":0,"content":"xixi"}\n'
{"code":0,"content":"xixi"}
# 返回值
{"return":"ok"}
复制代码

 

方法1:get_json

复制代码
get_json(force=False, silent=False, cache=True)
Parse data as JSON.

If the mimetype does not indicate JSON (application/json, see is_json()), this returns None.

If parsing fails, on_json_loading_failed() is called and its return value is used as the return value.

Parameters
force – Ignore the mimetype and always try to parse JSON.

silent – Silence parsing errors and return None instead.

cache – Store the parsed JSON to return for subsequent calls.
复制代码

 

例子

复制代码
@app.after_request
def handler_after_request(xx):
    return_dict = xx.get_json()   # 直接使用xx.data取出的结果是byte类型的东西,get_json直接取出的是字典类型
    print(return_str,type(return_dict)
    return jsonify(return_dict)

# 打印结果
{'code': 0, 'content': 'xixi'} <class 'dict'>

# 返回结果
{"code":0,"content":"xixi"}

# 如果视图函数没有返回值就返回
None <class 'NoneType'>
复制代码

 

 三:作用

(1)对视图函数的返回值进行统一处理

 

 

 

 

 

 

 

 

 

 

# TODO

posted @   张京墨  阅读(4421)  评论(0编辑  收藏  举报
编辑推荐:
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
阅读排行:
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!
点击右上角即可分享
微信分享提示