FLASK中特定参数不存在时的异常处理

10 投票
3 回答
5547 浏览
提问于 2025-04-17 10:26

我有一个表单,用来发送一些参数。在这个表单里,有一个复选框。如果这个复选框没有被选中,那么我就收不到任何参数。

在我的模块里,我有:

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

撰写回答