在烧瓶中提交表单时出现错误请求错误

时间:2020-01-28 22:03:46

标签: flask

所以我的表单看起来像这样

<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错误。我一直在寻找解决方案,但找不到适合我的情况

3 个答案:

答案 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')。我不确定是什么真正导致了问题,但是这种方式可以解决问题。