Python 使用flask验证参数
我是一个彻头彻尾的傻瓜,当我开始学习的时候,我面临着一些麻烦。具体来说,我想验证一些参数的存在性和类型 通过一些研究,我从flask restful中找到了RequestParser类 所以,这就是我的方法:Python 使用flask验证参数,python,flask,flask-restful,Python,Flask,Flask Restful,我是一个彻头彻尾的傻瓜,当我开始学习的时候,我面临着一些麻烦。具体来说,我想验证一些参数的存在性和类型 通过一些研究,我从flask restful中找到了RequestParser类 所以,这就是我的方法: @app.route("/", methods=['POST']) def testing(): if request.method == 'POST': try: parser = reqparse.RequestParser(bundl
@app.route("/", methods=['POST'])
def testing():
if request.method == 'POST':
try:
parser = reqparse.RequestParser(bundle_errors=True)
parser.add_argument('x1', type=float, help="x1 must be float")
parser.add_argument('x2', type=float, help="x2 must be float")
parser.add_argument('x3', choices=(1,2), help="x3 must be binary")
return jsonify({'test': 'ok})
except:
pass
如果输入正常,这对我的测试代码非常有用:
data = {
"x1" : 100,
"x2" : 200,
"x3" : 300
}
BASE_URL = "http://localhost:5000"
response = requests.post("{}/predict".format(BASE_URL), json = data)
response.json()
# {'x1': 100.0, 'x2': 200.0, 'x3': 300}
但是,使用:
data = {
"x1" : "a",
"x2" : 200,
"x3" : 300
}
我开始面对JSONDecodeError
。使用print(resnpose)
我看到API返回了代码400,但没有任何错误。如何以字典的形式返回错误?例如:
{"x1" : "x1 should be float"}
错误回溯:
Traceback (most recent call last):
File "C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1615, in full_dispatch_request
return self.finalize_request(rv)
File "C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1630, in finalize_request
response = self.make_response(rv)
File "C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1725, in make_response
raise ValueError('View function did not return a response')
ValueError: View function did not return a response
谢谢。对于第一次误读这个问题,我深表歉意 所以根据http://flask-restful.readthedocs.io/en/0.3.5/reqparse.html#error-处理,你几乎可以这样处理
parser = reqparse.RequestParser()
parser.add_argument(‘foo’, choices=(‘one’, ‘two’), help=’Bad choice: {error_msg}’)
那么
你能用错误的回溯更新这个问题吗?就这么做了。非常感谢。
{
"message": { "foo": "Bad choice: three is not a valid choice", }
}