Flask 如何在烧瓶蓝图中对所有响应进行jsonify

Flask 如何在烧瓶蓝图中对所有响应进行jsonify,flask,Flask,我正在使用Flask Blueprint模块为我的应用程序创建REST api。因为它是一个RESTAPI,所以每个响应都需要用JSON编码。目前,我必须确保用jsonfiy(我的数据)结束每个方法,这有点重复,很容易忘记。有没有办法告诉Flask,我希望所有来自蓝图的响应都被jsonified 我试着做: @blueprint_object.after_request def after_req(response): return jsonify(response) 但这似乎不起作用

我正在使用Flask Blueprint模块为我的应用程序创建REST api。因为它是一个RESTAPI,所以每个响应都需要用JSON编码。目前,我必须确保用
jsonfiy(我的数据)
结束每个方法,这有点重复,很容易忘记。有没有办法告诉Flask,我希望所有来自蓝图的响应都被jsonified

我试着做:

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

但这似乎不起作用,我也不知道为什么。如果你想知道的话,我知道Flask Restful扩展可以做到这一点,但我不使用该扩展,因为它不够灵活,无法满足我的需要。

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

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的Blueprint类进行子类化,以便在其中添加该方法


如果您不想使用不同的decorator(
json_route
而不是
route
),可以直接在实例上重写此方法,尽管它有点脏

blueprint\u object
是您的应用程序吗?可以向我们展示一个简单的视图,以及您如何在blueprint中注册它?根据您的操作方式,可能会有简单的解决方案。为什么不使用flask_restplus?