Flask Restx 响应编组

问题描述 投票:0回答:1

我知道响应编组看起来像这样:

from flask_restx import fields

some_object = {
    'id': fields.Integer(reqired=True),
    'name': fields.String(required=True)
}

@api.route('', methods=['POST'])
class SomeClass(Resource):
    @api.request_body(SomeInputSchemaJson)
    @api.response_ok(some_object)
    def post(self) -> str:
        return {'id': 3, 'name': 'idk'}, 200

response_ok
装饰器看起来像这样

def response_ok(self, model=None, description=None, code=200):
    return self.marshal_with(model, code=code, description=description, mask=False, skip_none=True)

但是!!因为我希望将一些 http 标头添加到我的响应中,所以我想做这样的事情:

from flask_restx import fields

some_object = {
    'id': fields.Integer(reqired=True),
    'name': fields.String(required=True)
}

@api.route('', methods=['POST'])
class SomeClass(Resource):
    @api.request_body(SomeInputSchemaJson)
    @api.response_ok(some_object)
    def post(self) -> str:
        data = {'id': 3, 'name': 'idk'}
        return make_response(jsonify(data), 200)

但这不起作用,因为

response_ok
装饰器突然不知道如何处理响应对象。解决这个问题的办法是什么?提前非常感谢!

python flask marshalling flask-restx
1个回答
0
投票

经过大量搜索,并且遇到了像你这样的类似问题,我已经成功地做到了这一点,而无需调用

make_response()
方法。

举个例子,你可以这样做:

from flask_restx import fields

some_object = {
    'id': fields.Integer(reqired=True),
    'name': fields.String(required=True)
}

@api.route('', methods=['POST'])
class SomeClass(Resource):
    @api.request_body(SomeInputSchemaJson)
    @api.response_ok(some_object)
    def post(self) -> str:
        return {'id': 3, 'name': 'idk'}, 200, {'header': 'content'}

有关官方文档的更多信息:https://flask-restx.readthedocs.io/en/latest/quickstart.html?highlight=headers#resourceful-routing

还有另一个响应:如何在 Flask-RESTful 中添加自定义 HTTP 响应标头?

© www.soinside.com 2019 - 2024. All rights reserved.