如何整合webargs + marshmallow?
How to integrate webargs + marshmallow?
我只是烧瓶的初学者。尝试整合 marshmallow 和 webargs。它在 flask-restful Resource class 中完美运行。但是当我使用简单的烧瓶路线时它不起作用
routes.py
class UserAPI(Resource):
@use_args(UserSchema())
def post(self, *args):
print(args)
return 'success', 201
def get(self):
return '<h1>Hello</h1>'
@bp.route('/test/', methods=['POST'])
@use_kwargs(UserSchema())
def test2(*args, **kwargs):
print(args)
print(kwargs)
return 'success', 201
api.add_resource(UserAPI, '/', endpoint='user')
我添加了使用 use_args
时必需的错误处理程序
from webargs.flaskparser import parser, abort
from webargs import core
@parser.error_handler
def webargs_validation_handler(error, req, schema, *, error_status_code, error_headers):
status_code = error_status_code or core.DEFAULT_VALIDATION_STATUS
abort(
400,
exc=error,
messages=error.messages,
)
这就是我向资源端点发出请求时得到的正常情况
当我向一个简单的烧瓶路由发出请求时,这就是我得到的结果,这是不正常的
我希望能够同时使用这两种方式
在 webargs 文档中找到答案:)
https://webargs.readthedocs.io/en/latest/framework_support.html#error-handling
from flask import jsonify
# Return validation errors as JSON
@app.errorhandler(422)
@app.errorhandler(400)
def handle_error(err):
headers = err.data.get("headers", None)
messages = err.data.get("messages", ["Invalid request."])
if headers:
return jsonify({"errors": messages}), err.code, headers
else:
return jsonify({"errors": messages}), err.code
我只是烧瓶的初学者。尝试整合 marshmallow 和 webargs。它在 flask-restful Resource class 中完美运行。但是当我使用简单的烧瓶路线时它不起作用
routes.py
class UserAPI(Resource):
@use_args(UserSchema())
def post(self, *args):
print(args)
return 'success', 201
def get(self):
return '<h1>Hello</h1>'
@bp.route('/test/', methods=['POST'])
@use_kwargs(UserSchema())
def test2(*args, **kwargs):
print(args)
print(kwargs)
return 'success', 201
api.add_resource(UserAPI, '/', endpoint='user')
我添加了使用 use_args
时必需的错误处理程序from webargs.flaskparser import parser, abort
from webargs import core
@parser.error_handler
def webargs_validation_handler(error, req, schema, *, error_status_code, error_headers):
status_code = error_status_code or core.DEFAULT_VALIDATION_STATUS
abort(
400,
exc=error,
messages=error.messages,
)
这就是我向资源端点发出请求时得到的正常情况
当我向一个简单的烧瓶路由发出请求时,这就是我得到的结果,这是不正常的
我希望能够同时使用这两种方式
在 webargs 文档中找到答案:) https://webargs.readthedocs.io/en/latest/framework_support.html#error-handling
from flask import jsonify
# Return validation errors as JSON
@app.errorhandler(422)
@app.errorhandler(400)
def handle_error(err):
headers = err.data.get("headers", None)
messages = err.data.get("messages", ["Invalid request."])
if headers:
return jsonify({"errors": messages}), err.code, headers
else:
return jsonify({"errors": messages}), err.code