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