【问题标题】:Flask form not validating when csrf token is included包含 csrf 令牌时,Flask 表单无法验证
【发布时间】:2022-07-12 18:36:39
【问题描述】:

我有一个烧瓶表单,我用它来获取输入以传递给一个类。当我尝试提交它时,它没有显示任何错误,只是重新加载同一页面。我已确保 csrf 令牌也包含在 jinja 模板中。代码如下:

Forms.py

class addTripForm(FlaskForm):
    location = StringField('Location', validators=[DataRequired()])
    startdate = DateField('Start Date', format='%Y=%m-%d', validators=[DataRequired()])
    enddate = DateField('End Date', format='%Y=%m-%d', validators=[DataRequired()])
    submit = SubmitField('Submit')

app.py

def check_form(form):
    print(form.errors)
    if form.submit():
        print("submitted")
    if form.validate():
        print("validated")

@app.route('/add', methods=['GET','POST'])
def add():
    form = addTripForm(request.form)
    check_form(form)
    if form.validate_on_submit():
        # if form is valid, use fields to create and store a trip
        print("adding trip")
        user.add_trip(form.location.data,
                        form.startdate.data,
                        form.enddate.data)
        return redirect('/trips')
    return render_template('add.html', form=form)

add.html

{% extends 'base.html' %}
{% block content %}
<body>
<h3> Select a location and date range</h3>
<form action="" method="POST" name="addtrip">
    {{ form.csrf_token }}
    {{ form.location.label }} {{form.location}}
    {{ form.startdate.label }} {{ form.startdate(class='datepicker') }}
    {{ form.enddate.label }} {{form.enddate(class='datapicker')}}

    <p>
    {{ form.submit(class='btn btn-primary') }}
    </p>
</form>
</body>
{% endblock %}

【问题讨论】:

    标签: python flask web


    【解决方案1】:

    您应该将 DateFields 的格式从 '%Y=%m-%d' 更改为 '%Y-%m-%d',然后您的代码才能工作。日期值在 HTTP 请求中的格式为 yyyy-mm-dd。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-28
      • 2016-09-09
      • 2011-09-25
      • 2014-07-12
      • 2017-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多