Python Flask WTF表单成功发布,但从未进行验证
我已经在WTF表格上挣扎了很长一段时间了。但这个错误似乎永远不会消失。当我试图运行此代码时,表单永远不会验证 观点:Python Flask WTF表单成功发布,但从未进行验证,python,flask-sqlalchemy,wtforms,flask-wtforms,Python,Flask Sqlalchemy,Wtforms,Flask Wtforms,我已经在WTF表格上挣扎了很长一段时间了。但这个错误似乎永远不会消失。当我试图运行此代码时,表单永远不会验证 观点: @bundle.route('/content/add/', methods=['GET', 'POST']) @bundle.route('/content/add', methods=['GET', 'POST']) @bundle.route('/content/edit/<posturl>/', methods=['GET', 'POST']) @bundle
@bundle.route('/content/add/', methods=['GET', 'POST'])
@bundle.route('/content/add', methods=['GET', 'POST'])
@bundle.route('/content/edit/<posturl>/', methods=['GET', 'POST'])
@bundle.route('/content/edit/<posturl>', methods=['GET', 'POST'])
@fas_login_required
def addcontent(posturl=None):
form = CreateContent()
form_action = url_for('content.addcontent')
if posturl is not None:
content = Content.query.filter_by(slug=posturl).first_or_404()
form = CreateContent(obj=content)
if form.slug.data == posturl and request.method == 'POST' and form.validate():
form.populate_obj(content)
db.session.commit()
return redirect(url_for('content.addcontent',
posturl=posturl, updated="True"))
else:
if request.method == 'POST' and form.validate():
query = Content(form.title.data,
form.slug.data,
form.description.data,
form.media_added_ids.data,
form.active.data,
form.tags.data,
g.fas_user['username'],
form.type_content.data
)
try:
db.session.add(query)
db.session.commit()
# Duplicate entry
except Exception as e:
return str(e)
return redirect(url_for('content.addcontent',
posturl=form.slug.data, updated="True"))
else:
print "Please validate form"
return render_template('content/edit_content.html', form=form,
form_action=form_action, title="Create Content")
和我的模板:
{% extends "base.html" %}
{% block title %}
{{ title }}
{% endblock %}
{% block content %}
{% from "_formhelpers.html" import render_field %}
<div id="Create Content">
<center><h3> {{ updated }} </h3></center>
<h2>{{ title }}</h2>
<form method="post" action="">
<fieldset>
<legend></legend>
{{ render_field(form.title) }}
{{ render_field(form.slug ) }}
{{ render_field(form.description ) }}
{{ render_field(form.media_added_ids)}}
{{ render_field(form.type_content) }}
{{ render_field(form.active) }}
{{ render_field(form.tags )}}
</fieldset>
<input type="submit" class="button" value="Save"/>
</form>
</div>
{% endblock %}
{%extends“base.html”%}
{%block title%}
{{title}}
{%endblock%}
{%block content%}
{%来自“\u formhelpers.html”导入呈现\u字段%}
{{updated}}
{{title}}
{{render_field(form.title)}
{{render_field(form.slug)}
{{render_field(form.description)}
{{render_field(form.media_added_id)}
{{render_字段(form.type_内容)}
{{render_field(form.active)}
{{render_field(form.tags)}
{%endblock%}
如果在您的
Flask
设置中激活了CSRF
令牌,则Flask WTF将自动添加该令牌,以高度感谢您的任何帮助。如果此设置处于活动状态且未包含在表单提交中,则提交将被拒绝。这种情况下的解决方案是在模板中添加隐藏标记
字段,以便将其包含在表单提交中
{{form.hidden_tag()}}
如果在flask应用程序设置中激活CSFR令牌,则每个表单中都包含一个CSFR令牌。如果开发人员已激活该设置,但未将其包含在表单模板中,flask WTF将自动拒绝该请求 此问题的解决方案是使用以下标签:
{{form.hidden_tag()}}
添加后,CSFR id将包含在请求中,并发送到视图以供WTForms验证
如果您没有包含此标记,则
表单中不会出现任何错误。错误
字典。如果您重复此命令,则不会显示任何错误,但form.validate方法将返回false。能否更具体地说明错误?让我详细解释一下。当我在表格上留空时。当我填写表单中的所有值时,它会通知我验证错误。然后提交表格。。即使如此,form.validate()也返回false。数据永远不会进入数据库将此添加到代码中以查看表单未验证的原因:print form.errors()这不会打印任何内容。Hammad,您能否提供一个简单的脚本()来说明您的问题。我不认为我们可以剪切并粘贴上面的代码来重现问题。没有能力重新创建它,我们只是随机猜测。重现问题越容易,你就越有可能吸引愿意帮助解决问题的人。
{{form.hidden_tag()}}