问题描述
我想做的是,能够将所有成功和错误的响应都包装在特定的结构中
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_wrapper
内
问题是双重的:
- 我将所有端点包装为完全相同的结构,因此我希望能够在
magic
或endpoints/__init__.py
内为我做一些main.py
的操作,类似于Exception
中出现的错误 - 我还希望能够将所有 reqparse 错误包装在相似的结构中。现在,
parser
已经过验证,但是reqparse
返回的错误响应也应该被包装,我不知道如何捕获。我愿意接受任何建议,例如marshmallow
或类似的库,以免我不必在整个系统的每个reqparse.parse_args()
端点上编写try-catch
endpoints/__init__.py
包装
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)