Flask RestX-将所有响应包装到一个结构中

Flask RestX-将所有响应包装到一个结构中,flask,flask-restful,Flask,Flask Restful,我有一个restx服务器 我想做的是,能够将所有的响应,包括成功的和错误的,封装在一个特定的结构中 下面是一个示例endpoints/\uuuuu init\uuuuu.py from flask import Blueprint from flask_restx import Api, fields from .api_1 import api as api_1_api from .api_2 import api as api_2_api blueprint = B

我有一个restx服务器

我想做的是,能够将所有的响应,包括成功的和错误的,封装在一个特定的结构中

下面是一个示例
endpoints/\uuuuu init\uuuuu.py

  from flask import Blueprint
  from flask_restx import Api, fields
  from .api_1 import api as api_1_api
  from .api_2 import api as api_2_api
  
  blueprint = Blueprint('', __name__)
  api = Api(blueprint)
  api.add_namespace(api_1)
  api.add_namespace(api_2)

  wrap = api.model('wrap', {
    "code": fields.Integer,
    "status": fields.String,
    "message": fields.String
  })

  @api.marshal_with(wrap)
  @api.errorhandler(Exception)
  def default_error_handler(error):
    return { 'code': 400, 'status': 'failure', 'message': str(error)}, 400

这是我的
main.py
,它是入口点

from flask import Flask
from endpoints import blueprint as api

app = Flask(__name__)
app.register_blueprint(api)
这是我的一个端点

  from flask_restx import Namespace, Resource, fields
  from flask_restx import reqparse
  
  api = Namespace()
  
  parser = reqparse.RequestParser()
  parser.add_argument('device_id', type=str, help='Device id', required=True)
  
  model = api.model('result', {
    "first": fields.Integer,
    "second": fields.Integer,
  })
  
  success_wrapper = api.model('success_wrapper', {
    "code": 400,
    "success": True,
    "data": fields.Nested(model),
  })
  
  @api.route("/")
  class Api1Class(Resource):
    @api.marshal_with(success_wrapper)
    @api.expect(parser)
    def get(self):
      args = parser.parse_args()
      return {'first': 1, 'second': 2}
api1.py
中可以看到,我将返回对象包装在
success\u包装器中

问题有两方面:

  • 我将所有端点包装在完全相同的结构中,因此我希望能够在
    endpoints/\uu init\uuuuuuuuuuuy.py
    main.py
    内部执行一些
    magic
    操作,这与
    endpoints/\uuuuuu init\uuuuuuuuuuuuy.py
    中看到的错误
    异常
    包装类似
  • 我还希望能够将所有reqparse错误包装在一个类似的结构中。现在,
    parser
    已经进行了验证,但是
    reqparse
    返回的错误响应也应该被包装,我不知道如何捕获它。我愿意接受任何建议,比如
    marshmallow
    或类似的库,这样我就不必在整个系统中的每个
    reqparse.parse_args()
    端点上编写try catch