Flask RestX-将所有响应包装到一个结构中
我有一个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
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
中看到的错误异常
包装类似parser
已经进行了验证,但是reqparse
返回的错误响应也应该被包装,我不知道如何捕获它。我愿意接受任何建议,比如marshmallow
或类似的库,这样我就不必在整个系统中的每个reqparse.parse_args()
端点上编写try catch