Python Flask:对 Post 方法的错误请求已选中单选选项

Python Flask: Bad Request on Post method with radio-option checked

假设我的 html 脚本中有 2 个单选按钮,默认选中其中一个:

<form action="" method="post">
    <div class="radio-option checked">
        <input type="radio" name="radioName" value="val_1"/>
    </div>
    <div class="radio-option">
        <input type="radio" name="radioName" value="val_2"/>
    </div>
    <div>
        <input type="submit" value="Confirm and continue"/>
    </div>
</form>

如果我单击提交按钮 而没有单击其他单选按钮 ,我会收到错误消息:

Bad Request The browser (or proxy) sent a request that this server could not understand.

发生这种情况是因为如果单选按钮默认为 checked 但之后没有用鼠标 select 编辑,则没有任何值正在传输!这就是 request.form 向我显示的 ImmutableMultiDict([])。如果我用鼠标 select 另一个单选按钮并单击提交按钮,它会显示值 ImmutableMultiDict(['radioName', 'val_2'])

我试图像这样捕获错误,但没有成功:

if request.form == '':
    flash('error')
    return render_template('default_template.html')
  1. 如何在 flask 内处理此问题?
  2. 如何设置可以发送到服务器的默认值?

您可以在烧瓶中进行检查。检查 request.form 是否有项目或者它是否为空并在这种情况下抛出错误。 知道它是否为空的一种简单方法是,例如:

if len(request.form) == 0:
    print('Error: The form is empty')
else:
    print('The form has data, we can proceed')

另一种方式是:

if 'radioName' not in request.form:
    print('Error: The form is empty')
    ...

但也许 flask 有更好的方法来做到这一点,或者在这些情况下有更好的做法可以遵循。

另一方面,在您发布的 html 片段中,默认情况下会检查 none 个输入。 您在 div 上有 checked css class,但在带有 type=radioinput 中没有 checked 属性。

checked 属性的正确用法如下:

<form action="" method="post">
    <div class="radio-option checked">
        <input type="radio" name="radioName" value="val_1" checked/>
    </div>
    <div class="radio-option">
        <input type="radio" name="radioName" value="val_2"/>
    </div>
    <div>
        <input type="submit" value="Confirm and continue"/>
    </div>
</form>

这样,默认情况下将检查值为 val_1 的单选输入,填充进入服务器的字典。

有关更多信息,请查看:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio

您还可以使用 required 属性避免向服务器发送空表单,以确保用户按预期填写表单。

要了解更多信息:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Form_validation

希望对您有所帮助!