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')
- 如何在
flask
内处理此问题?
- 如何设置可以发送到服务器的默认值?
您可以在烧瓶中进行检查。检查 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=radio
的 input
中没有 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
希望对您有所帮助!
假设我的 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')
- 如何在
flask
内处理此问题? - 如何设置可以发送到服务器的默认值?
您可以在烧瓶中进行检查。检查 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=radio
的 input
中没有 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
希望对您有所帮助!