标签: flask-wtforms

来自flask_login的login_required装饰器没有重定向到上一页

我正在使用flask_login登录并注销应用程序,但重定向回到上一页似乎不起作用.我使用flask.views和login_required作为需要用户登录的视图的装饰器.但是,当我尝试访问需要登录的/ path时,它会重定向到/ login而不是/ login?next =/path这意味着request.get.args("next")是None.

我在我的蓝图中使用登录需要的烧瓶视图,如下所示:

from flask import Blueprint, render_template, request, redirect, url_for
from flask.views import MethodView
from models import Post
from flask.ext.mongoengine.wtf import model_form
from flask.ext.login import login_required

posts_app = Blueprint('posts_app', __name__, template_folder='templates', static_folder='static', static_url_path='/static')

class ListView(MethodView):
    decorators = [login_required]

    def get(self):
        posts = Post.objects.all()
        print posts
        return render_template('posts/list.html', posts=posts)

posts_app.add_url_rule('/', view_func=ListView.as_view('list'))
Run Code Online (Sandbox Code Playgroud)

在一个单独的蓝图中,我正在实现身份验证:

from flask import Blueprint, render_template, request, current_app, flash, redirect, url_for
from forms import LoginForm, RegisterForm, ForgotForm
from libs.User import User
from flask.ext.login import login_user, login_required, …
Run Code Online (Sandbox Code Playgroud)

python flask flask-login flask-wtforms

6
推荐指数
1
解决办法
9393
查看次数

如何手动创建表单,然后在Flask wtform中对其进行验证?

如何手动填写表格然后进行验证?

class TestForm(Form):
    name = StringField('name', validators=[InputRequired()])
    age = IntegerField('age', validators=[InputRequired()])
Run Code Online (Sandbox Code Playgroud)

我尝试使用任意数据构建表单并验证:

data = {'name': 'bob', 'age': 33}
tform = TestForm(name=data['name'], age=data['age'])
if tform.validate():
    print 'success!'
else:
    print tform.errors
Run Code Online (Sandbox Code Playgroud)

结果打印出错误:

{'age': [u'This field is required.']}
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为name即使我将他们都提供给了我的朋友,也没有抱怨TestForm。我究竟做错了什么?

python flask flask-wtforms

6
推荐指数
1
解决办法
291
查看次数

烧瓶表单字段的动态默认值设置

我正在尝试为烧瓶wtforms中的字符串字段设置默认值。以下是我的代码,它不起作用。

码:

from flask.ext.wtf import Form
from wtforms import StringField
class TestForm(Form):
     test = StringField('Test field')

@app.route('display/')
def display():
    dynamicvalue = getdynamicvalue()
    return render_template('test.html', form = form, defname = dynamicvalue)
Run Code Online (Sandbox Code Playgroud)

test.html:

<div class="controls">
  {{ form.test(size=80, readonly="readonly", value={{defname}} }}
</div>
Run Code Online (Sandbox Code Playgroud)

我该如何纠正?

以下是错误

{{form.test(size=80, readonly= "readonly", value={{defname}}  }}
TemplateSyntaxError: expected token ':', got '}'
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask flask-wtforms

6
推荐指数
1
解决办法
7749
查看次数

Flask在unittest中禁用CSRF

在我的项目中__init__.py我有这个:

app = Flask(__name__)
app.config.from_object('config')
CsrfProtect(app)
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud)

我的开发配置文件如下所示:

import os
basedir = os.path.abspath(os.path.dirname(__file__))

DEBUG = True
WTF_CSRF_ENABLED = True
SECRET_KEY = 'supersecretkey'
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'project.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
Run Code Online (Sandbox Code Playgroud)

在我的unittest setUp中我有这个:

from project import app, db

class ExampleTest(unittest.TestCase):
   def setUp(self):
        app.config['TESTING'] = True
        app.config['WTF_CSRF_ENABLED'] = False
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
        self.app = app.test_client()
        db.create_all()
Run Code Online (Sandbox Code Playgroud)

理论上,在这里将WTF_CSRF_ENABLED设置为False应该可以防止单元测试的CSRF,但是如果我在单元测试时进行POST,我仍然会遇到CSRF错误.我认为这是因为我已经调用了CsrfProtect(app)而WTF_CSRF_ENABLED为True(当我导入app时,它被调用).如果我在配置文件中设置WTF_CSRF_ENABLED = False,它将按预期工作.

无论如何我可以在启用后禁用CSRF吗?或者我在这里咆哮错误的树?

flask flask-wtforms

6
推荐指数
2
解决办法
3994
查看次数

如何使用Jinja2模板解码烧瓶中的&#39

当我尝试在Jinja2模板中从wtforms写入错误时,它将返回未解码的报价。我该如何解决?

{% if registrationForm.errors %}
    <script>swal("Error!", "{{ registrationForm.errors['password'] }}", "error")</script>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

误差等于

{'email': ['This field is required.'], 'username': ['This field is required.'], 'acceptTOS': ['This field is required.'], 'csrf_token': ['CSRF token missing'], 'password': ['This field is required.']}
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask flask-wtforms

6
推荐指数
1
解决办法
2101
查看次数

Flask-WTF CSRFProtect 给出“400 CSRF 令牌丢失”错误

我正在尝试使用 Flask-WTF 的扩展添加 CSRF 令牌保护CSRFProtect。除了此 CSRF 保护之外,该应用程序不使用 WTForms。

我遵循了文档,但收到“400 Bad Request The CSRF token is Missing”。

from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect(app)
Run Code Online (Sandbox Code Playgroud)

我将以下内容放入模板中(带表单或不带表单),但出现相同的错误。

from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect(app)
Run Code Online (Sandbox Code Playgroud)

python flask flask-wtforms

6
推荐指数
1
解决办法
2万
查看次数

使用 React Form、Flask 服务器和 Flask-WTF 保护 CSRF

TL;DR 我需要保护我的表单免受 CSRF 攻击,我想在前端使用 ReactJS,在后端使用 Flask/Flask-WTF。

我正在重构一个使用 Python、Flask 和 Flask-WTF 构建的用于表单的网站,我想将 React 用于前端,而不是通过 PyPugjs 使用 Jinja2。我正在使用 Flask-WTF 来呈现表单,它负责处理 CSRF 令牌等。我知道如何使用 React 制作表单,但如何获得 CSRF 保护?

现在我的表单渲染看起来像这样:(使用 Pug)

mixin render_form(form, id='', action='Submit')
    form(method='POST', action='', id=id)
        =form.csrf_token

        each field in form
            fieldset
                if field.errors
                    each error in field.errors
                        .notification.error
                            #{error}

                #{field(placeholder=field.label.text)}

        button(type='submit') #{action}
Run Code Online (Sandbox Code Playgroud)

javascript csrf-protection flask-wtforms reactjs

6
推荐指数
2
解决办法
3202
查看次数

禁用 WTForms SelectField 中的选项之一

将“禁用”html 属性分配给 WTForms 中 SelectField 中的选项之一的最简单方法是什么?

这是我之前的代码

<select class="form-control" name="division" data-error="Required!" required>
     <option value="default" disabled selected>Select something</option>
     <option value="option1">Option 1</option>
     <option value="option2">Option 2</option>
 </select>
Run Code Online (Sandbox Code Playgroud)

如您所见,我只想将“禁用”设置为第一个选项。

我这个任务的代码是:

next(form.division.__iter__())(**{'disabled':'true'})
Run Code Online (Sandbox Code Playgroud)

在控制台中使用打印功能我可以看到正确的输出:

<option disabled="true" selected value="default">Select something</option>
Run Code Online (Sandbox Code Playgroud)

该行正在工作,但不知何故此输出未传递给模板。相反,这是通过的:

<option selected value="default">Select something</option>
Run Code Online (Sandbox Code Playgroud)

请有人说清楚。

python flask-wtforms

6
推荐指数
2
解决办法
3794
查看次数

使用AJAX使用Flask-WTForms将条目追加到FieldList

我使用Flask-WTForms在Flask中制作了一个简单的表单,父母可以在其中注册自己和他的孩子。父母可以通过单击“添加孩子”按钮来注册任意数量的孩子。WTForms通过使用FieldList功能使此操作非常容易实现。

但是,单击“添加子项”按钮后,页面会自动刷新,因为它向服务器发出了请求。我想使用AJAX请求添加子表单,因此页面不会刷新。

我知道如何执行AJAX请求,发送回响应并将此响应添加到html页面。但是,我不知道如何将条目追加到表单对象并返回页面本身(以某种方式)以及更新后的表单对象。那有可能吗?

我的表格:

class ChildForm(FlaskForm):

    name = StringField(label='Name child')
    age = IntegerField(label='Age child')

    class Meta:
        # No need for csrf token in this child form
        csrf = False

class ParentForm(FlaskForm):

    name = StringField(label='Name parent')
    children = FieldList(FormField(ChildForm), label='Children')
    add_child = SubmitField(label='Add child')

    submit = SubmitField()
Run Code Online (Sandbox Code Playgroud)

我的路线:

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = ParentForm()

    if form.add_child.data:
        form.children.append_entry()
        return render_template('register.html', form=form)

    if form.validate_on_submit():
        # do something with data

    return render_template('register.html', form=form)
Run Code Online (Sandbox Code Playgroud)

register.html:

<form action="{{ url_for('register') }}" method="post" id="parentForm">
    {{ form.hidden_tag() …
Run Code Online (Sandbox Code Playgroud)

ajax jquery flask python-3.x flask-wtforms

6
推荐指数
1
解决办法
1599
查看次数

如何在quick_form烧瓶引导程序中将类添加到标签

使用quick_form Flask-Bootstrap生成的形式对我来说是非常方便的,但是,我不能在他们找到的文档的方式,我可以额外类添加到label所要求的我的模板主题。

我的 forms.py 类如下所示:

from flask_wtf import Form
from wtforms import StringField,PasswordField,TextField,SubmitField
from wtforms.validators import InputRequired,EqualTo,Email,ValidationError

class Building_Form(Form):
    BuildingName = TextField('Building Name')
    BuildingType = TextField('Building Type')
    FloorNums    = TextField('Numers of Floor')
    BuildUnits   = TextField('Units in Building')
    BuildSize    = TextField('Building Size')
    BuiltYear    = TextField('Built in (year)')
    BuildOpeningTime = TextField('Open Time')
    BuildClosingTime = TextField('Close Time')
Run Code Online (Sandbox Code Playgroud)

我的routes.py如下所示:

from app.import_core import *
from flask_wtf import FlaskForm
from wtforms import Form, BooleanField, StringField, PasswordField, validators
from …
Run Code Online (Sandbox Code Playgroud)

flask python-2.7 flask-wtforms flask-bootstrap

6
推荐指数
1
解决办法
2640
查看次数