gpt4 book ai didi

flask - 如何在 flask 蓝图中对所有响应进行 jsonify

转载 作者:行者123 更新时间:2023-12-03 16:40:45 26 4
gpt4 key购买 nike

我正在使用 Flask 蓝图模块为我的应用程序创建 REST API。因为它是一个 REST api,所以每个响应都需要用 JSON 编码。目前,我必须确保以 jsonfify(my_data) 结束每个方法,这有点重复且容易忘记。有没有办法告诉 Flask 我希望对来 self 的蓝图的所有响应进行 jsonified?

我试过:

@blueprint_object.after_request
def after_req(response):
return jsonify(response)

但这似乎不起作用,我不确定为什么。如果您想知道,我知道 Flask-Restful 扩展可以做到这一点,但我没有使用该扩展,因为它不够灵活,无法满足我的需求。

最佳答案

我写了一个小片段来将 json_route 方法添加到一个已经存在的蓝图(Blueprint 类的实例)。您可以调用它而不是 a_blueprint.route 来装饰返回 json 兼容内容的 View :

import types

from flask import jsonify


def json_route(self, rule, **options):
def decorator(f):
endpoint = options.pop("endpoint", f.__name__)

def new_f(*args, **kwargs):
return jsonify(f(*args, **kwargs))

self.add_url_rule(rule, endpoint, new_f, **options)

return new_f
return decorator

a_blueprint.json_route = types.MethodType(json_route, a_blueprint)

那么你可以这样表达你的观点:

@a_blueprint.json_route('/test')
def test_dict():
return {'foo': 'bar'}

如果你想在多个蓝图中使用这个装饰器,可能值得将 Flask 的蓝图类子类化以在其中添加该方法。

如果你不想使用不同的装饰器(json_route 而不是 route),你可以直接在实例上覆盖这个方法,虽然它有点脏。

关于flask - 如何在 flask 蓝图中对所有响应进行 jsonify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27154913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com