首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >水瓶-WTF表单发布成功,但验证从未发生。

水瓶-WTF表单发布成功,但验证从未发生。
EN

Stack Overflow用户
提问于 2014-05-27 09:27:26
回答 2查看 1.8K关注 0票数 2

我在WTF表格上挣扎了很长一段时间。但是这个错误,似乎永远不会消失。当我试图运行这段代码时,表单从未验证过。

意见:

代码语言:javascript
复制
@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")

表格班:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
from flask.ext.wtf import Form
from wtforms import TextField, TextAreaField
from wtforms import BooleanField, SelectField, validators
from wtforms.validators import Required

__all__ = ['CreateContent']


class CreateContent(Form):
    title = TextField(
        'Title',  [validators.Length(min=4, max=255)])
    slug = TextField(
        'Url-Slug', [validators.Length(min=4, max=255)])
    description = TextAreaField('Content', [validators.Length(min=4)])
    media_added_ids = TextField('media')
    type_content = SelectField(u'Content Type',
                               [Required()],
                               choices=[('blog', 'Blog Post'),
                                        ('media', 'Lecture'),
                                        ('doc', 'Documentation')]
                               )
    # Comma seprated media id's
    active = BooleanField('Published')
    tags = TextField('Tags', [Required()])
    # Comma seprated tag id's

我的模板是:

代码语言:javascript
复制
    {% 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 %}

任何帮助都将得到高度重视。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-29 12:24:46

如果CSFR令牌是在一个烧瓶应用程序设置中激活的,则每个表单中都包含一个CSFR令牌。如果开发人员激活了设置并没有将其包含在表单模板中,则烧瓶WTF将自动拒绝请求。

解决这个问题的方法是使用以下标签:

代码语言:javascript
复制
{{form.hidden_tag()}} 

一旦添加,CSFR id将包含在请求中,并发送到视图中,由WTForms进行验证。

如果没有包含此标记,form.errors字典中将不会出现错误。如果您迭代这个二叉码,则不会显示任何错误,但是form.validate方法将返回false。

票数 6
EN

Stack Overflow用户

发布于 2014-05-28 13:51:34

如果CSRF令牌在Flask设置中被激活,WTF会自动添加它。如果此设置处于活动状态,且未包含在表单提交中,则提交将被拒绝。本例中的解决方案是在模板中添加hidden_tag字段,以便将其包含在表单提交中。

代码语言:javascript
复制
{{form.hidden_tag()}} 
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23885741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档