我有以下代码,并且正在提交表格。当我点击提交按钮时,我的表单验证会打印出
False
。我已经检查并确保我包含了不同帖子中的所有内容,但我无法对其进行验证。我是不是做错了什么?
@app.route('/index.html', methods=['GET', 'POST'])
def index():
user = {'nickname': 'Rafa'}
form = FilterForm()
print("about to validate", file=sys.stderr)
if form.validate_on_submit():
print("validated", file=sys.stderr)
filters_array = form.filter.split(',')
streaming(filters_array)
response = {"response", "yes"}
redirect("/authenticate")
return render_template('index.html',
title="Home",
user=user,
form=form)
class FilterForm(Form):
filter = StringField('filter', validators=[DataRequired()])
这是我的 Jinja 文件
{% block content %}
<h1> I have successfully navigated to the title pagee </h1>
<h1> Hello, {{user.nickname}}!</h1>
<h1> Get Tweets </h1>
<p> Please enter a comma delimited list of filters</p>
<form action="" method="post" name="login">
{{form.filter(size=80)}}
<input type="submit" value="Get Tweets!">
</form>
{% endblock %}
FilterForm
不应与 def index()
缩进同一水平。更重要的是,您的表单中没有 csrf_token
。这将阻止它验证。
将此添加到您的表单中:
{{ form.csrf_token }}
最后,当使用 wtforms 进行验证时,错误将填充到表单对象中。因此,在
if validate
之后,尝试打印 form.errors
,您就会发现到底出了什么问题。
另一个要求是,当您使用
form.validate_on_submit
时,您必须确保您已使用表单模型的所有字段。
我在你的代码中发现了一些语法错误,也许这会导致你遇到的问题。
首先,你的装饰器中的问题app.route:
app.route('/index')
第二,在你的html文件中:
form action='/index'
它与这个确切的问题无关,但是如果你遇到这样的问题并且错误没有显示任何内容,你有
{{ form.csrf_token }}
或{{ form.hidden_tag() }}
,ypu以表格形式打印了所有数据,看起来不错,这意味着它是百分百的html 表单中某处有拼写错误。
尝试使用模板重写表单: 在
_formhelpers.html
:
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
用途:
{% from "_formhelpers.html" import render_field %}
<form method=post>
<dl>
{{ form.hidden_tag() }}
{{ render_field(form.username) }}
{{ render_field(form.email) }}
{{ render_field(form.password) }}
{{ render_field(form.confirm) }}
{{ render_field(form.accept_tos) }}
</dl>
<p>{{ form.submit }}
</form>
更容易避免拼写错误和其他错误。
来源: https://flask.palletsprojects.com/en/1.1.x/patterns/wtforms/#forms-in-templates
我也有同样的问题。我只是将
{{ form.hidden_tag() }}
放入 html Jinja 模板中,嵌套在表单标签中。现在,一切正常。
以下是我在这里安装的一些 Flask 相关软件包的版本: