所以我的表单看起来像这样
<form action="{{ url_for('addnote') }}">
Notatka: <input type="text" name="note" placeholder="Notatka">
<br><br>
<input onclick="document.getElementById('receiver').disabled ^= true;" type="checkbox" checked> Do wszystkich?
<br><br>
<input type="text" name="receiver" id="receiver" placeholder="Adresat" disabled="false" value="">
<br><br>
<input type="hidden" name="author" value="{{ current_user.username }}">
<input type="submit" name="action" value="Dodaj notatke">
</form>
这时我在烧瓶中的功能只有这个:
def addnote():
note=request.form['note']
author=request.form['author']
receiver=request.form['receiver']
return "whatever"
稍后,我想对这些数据进行处理,但是即使使用少量的代码,我也会收到BAD REQUEST错误。我一直在寻找解决方案,但找不到适合我的情况
答案 0 :(得分:0)
您的表单没有method="post"
属性,因此它将默认为get
,从而产生URL键/值对(例如/addnote?note=x&receiver=...
)
还要确保您的路线正在监听POST:
@app.route('/addnote', methods=['GET', 'POST'])
def addnote():
...
答案 1 :(得分:0)
您可能想研究Flask WTForms。 WTForms是出色的Flask扩展,可以很好地处理此问题。使用WTForms看起来像这样:
<div class="form-group">
{{ form.myField.label(class="form-control-label") }} {% if form.myField.errors %} {{ form.myField(class="form-control
form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for errors in form.myField.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %} {{ form.myField(class="form-control form-control-lg") }} {% endif %}
</div>
<form action="http://127.0.0.1:5000/addnote" method="post">
<input type="submit" class="btn btn-outline-info" name="submit_button" value="Retrieve Data">
</form>
服务器端将类似于:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField, SelectField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
class ToolForm(FlaskForm):
myField = StringField('Enter Data', validators=[DataRequired()])
@app.route('/addnote', methods=['GET', 'POST'])
def addnote():
form = ToolForm()
if request.method == 'POST':
if request.form['submit_button'] == 'Retrieve Data':
x = form.myField.data
答案 2 :(得分:0)
好的,所以我不想使用flask_wtf,但是我找到了解决此问题的方法。我正在使用author=request.form['author']
而不是使用author=request.form.get('author')
。我不确定是什么真正导致了问题,但是这种方式可以解决问题。