FLASK中特定参数不存在时的异常处理
我有一个表单,用来发送一些参数。在这个表单里,有一个复选框。如果这个复选框没有被选中,那么我就收不到任何参数。
在我的模块里,我有:
var = request.form['mycheckbox']
如果我的复选框没有被选中(也就是参数没有传递过来),
那么在调试模式下,我会看到一个错误信息:
错误请求:浏览器(或代理)发送了一个服务器无法理解的请求。
这个错误信息并没有告诉我具体是什么问题。
我通过使用以下代码避免了这个异常:
try:
var=request.form['checkbox']
except:
var=None
但是,我能不能改变Flask处理这种情况的方式呢?
3 个回答
0
我在验证一个单一的布尔字段时遇到了类似的问题。
我通过使用 remember = form.rememberme.data
来解决这个问题,而不是用 request.form['remember_me']
。
15
var = request.form.get('checkbox')
如果这个参数没有被定义的话,它会返回 None
。
8
这个问题的原因可以在Flask的文档中找到,链接在这里: http://flask.pocoo.org/docs/api/#flask.Flask.trap_http_exception
我不太明白为什么在调试模式下这个行为没有改变,但如果你想让Flask捕捉到来自werkzeug的BadRequestKeyError异常,你需要在你的应用对象上运行类似下面的代码:
app.config['TRAP_BAD_REQUEST_ERRORS'] = True