标签: wtforms

flask form.validate_on_submit() 使用 wtforms 失败

使用@dirn 的建议,验证错误不再显示,但它似乎仍然失败,因为 root() 函数中的打印语句既不显示/运行,也没有新的 form.errors 显示。

应用代码:

#!/usr/bin/env python

import cherrypy
import os
from flask import Flask, render_template, redirect, url_for, session, request, flash, abort, Markup
from flask.ext.bootstrap import Bootstrap
from sybload import funcs, forms

app = Flask(__name__)
app.debug = True
app.config['SECRET_KEY'] = os.urandom(24)
app.config['CSRF_ENABLED'] = True
bootstrap = Bootstrap(app)

dataserver_info = funcs.get_dataserver_info()
dataservers = funcs.get_dataservers(dataserver_info)

@app.route('/', methods=['GET', 'POST'])
def root():
    session.clear()
    form = forms.DataServersForm()
    form.dataserver.choices = zip(dataservers, dataservers)
    if form.validate_on_submit():
        session['dataserver'] = form.dataserver.data
        # print statement below never runs
        print …
Run Code Online (Sandbox Code Playgroud)

python cherrypy flask wtforms

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

通过解析yaml文件创建表单

我有一个yaml文件如下

name:
    property_type: string
    mandatory: True
    default: None
    help: your full name

address:
    city:
        property_type: string
        mandatory: True
        default: None
        help: city

    state:
        property_type: string
        mandatory: True
        default: None
        help: state
Run Code Online (Sandbox Code Playgroud)

我想要做的是解析此文件以创建一个表单类(可由 Django 或 WT-Forms 使用)来创建 Web 表单。

我不能简单地创建类,因为只要更新 yaml 配置文件,表单(以及类)就需要自动更新。

我目前正在尝试使用 pyyaml 来完成此任务。在此先感谢您的帮助。

django pyyaml wtforms flask-wtforms

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

表单对 WTForms 永远无效

我有一个用于登录的 Flask-WTF 表单。显然该表单永远不会有效,无论我输入什么“成功”都不会打印。为什么我的表单没有验证?

class loginForm(Form):
    email = EmailField('email', validators=[InputRequired("Please enter your email address."), Email("Please enter a valid email address.")])
    password = PasswordField('password', validators=[InputRequired("Please enter your password.")])

@app.route('/sign-in', methods=['POST', 'GET'])
def signIn():
    form = loginForm(request.form)
    if form.validate_on_submit():
        print 'success'
        return redirect('/')
    return render_template('signIn.html')
Run Code Online (Sandbox Code Playgroud)
class loginForm(Form):
    email = EmailField('email', validators=[InputRequired("Please enter your email address."), Email("Please enter a valid email address.")])
    password = PasswordField('password', validators=[InputRequired("Please enter your password.")])

@app.route('/sign-in', methods=['POST', 'GET'])
def signIn():
    form = loginForm(request.form)
    if form.validate_on_submit():
        print 'success'
        return redirect('/')
    return …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

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

Jinja/Wtform aria-required 验证

我有一个前端,它通过一个简单的宏生成引导程序表单:

{% macro render_field(field, class_='', label_visible=true) -%}

<div class="form-group {% if field.errors %} has-error {% endif %}">
    {% if (field.type != 'HiddenField' and field.type !='CSRFTokenField') and label_visible %}
        <label for="{{ field.id }}" class="control-label">{{ field.label }}</label>
    {% endif %}
    {{ field(class_='form-control', **kwargs) }}
    {% if field.errors %}
        {% for e in field.errors %}
            <p class="help-block">{{ e }}</p>
        {% endfor %}
    {% endif %}
</div>

{%- endmacro %}
Run Code Online (Sandbox Code Playgroud)

我使用的 wtform 如下所示:

class CommentForm(Form):
    comment = TextAreaField(validators=[DataRequired('Please enter your comment.')])
Run Code Online (Sandbox Code Playgroud)

是否可以为aria-required="true"具有作为验证器的字段添加前端验证 …

jinja2 wtforms flask-wtforms twitter-bootstrap-3

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

Flask WTForms 表单无法验证

我无法验证某个简单的 Flask WTForm。

经过几天的努力,我已经尝试了所有我能想到的方法。总的来说,我对 Flask 和 Web 编程很陌生。

这是我的代码的精简但有效的版本。测试代码的唯一操作(除了提交表单之外)是将消息打印到终端。运行时的样子:

运行代码截图

这是views.py:

    # -*- coding: utf_8 -*-
...

@app.route('/test/new/', methods=['GET','POST'])
def newTest():
    form = TestForm(request.form)
    if form:
        print 'request.form.get(\'name\') is %s' % (request.form.get('name'),)
    if request.method == 'POST':
        print 'in newTest(), request is POST'
        if form.validate():
            print 'form validates'
            return redirect(url_for('allTests'))
        else:
            print 'form does not validate'
            return render_template('newTest.html', form=form)
    else:
        return render_template('newTest.html', form=form)
Run Code Online (Sandbox Code Playgroud)

这是forms.py:

class TestForm(Form):
    name = StringField(u"Test Name", [validators.InputRequired()])
    address = StringField(u"Test Address", [validators.InputRequired()])

    submit = SubmitField(u"Submit")
Run Code Online (Sandbox Code Playgroud)

模型.py:

from sqlalchemy …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy flask python-2.7 wtforms

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

将自定义对象传递给 WTForm

我需要将一个对象从我的数据库传递到我的表单,我想从中读取默认值。我当前的代码如下所示:

我的初始化:

form = EditEventForm(event)
Run Code Online (Sandbox Code Playgroud)

还有我的表单类:

class EditEventForm(FlaskForm):
    def __init__(self, event):
        self.event = event

    name = StringField('Name', validators=[DataRequired()],     default=self.event.name)
    description = TextAreaField('Description', validators=[DataRequired()], default=self.event.description)
    street = StringField('Street and number', validators=[DataRequired()], default=self.event.street)
    city = StringField('City', validators=[DataRequired()], default=self.event.city)
    time = StringField('Time', validators=[DataRequired()], default=self.event.time)
Run Code Online (Sandbox Code Playgroud)

但显然,表单无法访问自上下文。有没有另一种方法可以实现它,以便我的字段可以从传递的对象中读取数据?

python flask python-3.x wtforms flask-wtforms

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

验证时带有枚举值的 Python Flask WTForm SelectField '不是一个有效的选择'

我的 Python Flask 应用程序使用 WTForms 和内置的 Python Enum 支持。我正在尝试提交一个表单 (POST),其中 SelectField 由枚举的所有值填充。

当我点击“提交”时,出现错误“不是有效的选择”。这看起来很奇怪,因为在检查传入表单的值时,该表单似乎确实包含提供的 Enum 值列表中的有效选择。

我正在使用名为 Enum 的子类,AJBEnum其格式如下:

class UserRole(AJBEnum):
    admin = 0
    recipient = 1
Run Code Online (Sandbox Code Playgroud)

我选择这样做是因为我在整个项目中使用了许多枚举,并希望编写一个帮助函数来收集所有选择并将它们格式化为 WTForm SelectField 元组友好。AJBEnum 的格式如下:

class AJBEnum(Enum):

    @classmethod
    def choices(cls, blank=True):
        choices = []
        if blank == True:
            choices += [("", "")]
        choices += [(choice, choice.desc()) for choice in cls]
        return choices
Run Code Online (Sandbox Code Playgroud)

这意味着我可以UserRole在创建 SelectField 期间为 WTForms 提供所有选择,如下所示:

role = SelectField('Role', choices=UserRole.choices(blank=False), default=UserRole.recipient)
Run Code Online (Sandbox Code Playgroud)

请注意,函数参数blank提供了一个额外的空白 SelectField 选项,以防 SelectField 是可选的。在这种情况下,事实并非如此。 …

python enums flask wtforms

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

使用 GET 方法提交带有烧瓶 wtforms 的表单

我有 2 条路线:

@app.route('/activity', methods=["GET"])
def addactivity():
    return render_template('activity.html')
Run Code Online (Sandbox Code Playgroud)

在 acitvity.html 中,我有一个包含一些字段的表单,我想将此表单提交到另一条路线:

@app.route('/students', methods=["GET"])
def addstudents():
    return render_template('students.html')
Run Code Online (Sandbox Code Playgroud)

因此,当我在 acitivity.html 中提交表单时,我将被重定向到

/students?field1=value1&field2=value2 等等...

对于活动表单,我使用带有验证器的 wtforms:DataRequired() 或 InputRequired()

问题是,当我在 addtudents 路由中使用 form.validate() 时,即使表单已验证或未验证,它也会将我重定向到 student.html 路由。我想以防表单未验证以显示 activity.html 中的错误.这怎么可能?

我是 Flask 的新手,也许我的整个代码是错误的,但概念是,如果活动表单经过验证,我将被重定向到学生路线,否则将在活动路线中显示错误。此外,我需要提交学生路线中的表格与前一个表格的参数。

python forms flask wtforms

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

自定义 Flask-WTF 或 WTForms

我正在尝试将 Flask 集成为我正在使用的 UI 的后端。

不幸的是,UI 已经为表单设置了 CSS 和 JavaScript(以适应 UI,也适应旧版本的 IE 和其他情况)。

我遇到的第一个问题是字段已经有标签。如果我在模板中使用.labels属性:

{{ form.username.label }}
Run Code Online (Sandbox Code Playgroud)

然后它创建一个额外的标签,我似乎无法为 CSS/JavaScript 添加任何属性。但是,如果我关闭.label属性,则会在用户名输入上方创建一个额外的空白文本字段。

我的forms.py文件中的代码是:

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)

我在这方面遗漏了什么吗?

第二部分是向表单本身添加属性。我已经找到了如何使用class_='classname'添加 HTML属性,但是 Flask-WTF 和 WTForms 文档似乎没有涉及任何其他属性(例如autcomplete="off"placholder="username"

有没有什么方法可以用我所缺少的 Flask-WTF 或 WTForms 来完成这个任务?对于此类功能,我是否仅限于手动属性和/或 Jinja 宏?我无法想象 WTForms 和 Flask-WTF 会缺少这一点,但我也没有看到文档或 Google/StackOverflow 上的任何地方提到它。

谢谢!

python flask wtforms flask-wtforms

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

Flask wtform DateTimefield 渲染问题

使用 Flask wtform 遇到一个奇怪的问题。我在类表单中创建了 DateTimeField,但是当我查看页面时,它显示为type="text".

<input id="date" name="date" type="text" value="">
Run Code Online (Sandbox Code Playgroud)

我希望它显示为type="datetime-local",如果您不想手动输入,它会提供一个带有下拉日历和时间搜索的漂亮输入框。

此外,所有 IntegerField、FloatField 也是文本类型,而 BooleanField 和 PasswordField 则按其应有的方式运行。

也许我在这里遗漏了一些东西。这可能与烧瓶和 wtforms 吗?非常感谢任何指导

这是我的代码:

索引.html

<div class="container">
  <div class="row">
    <div class="col-xs-12">
      <p class="lead">This is the index page  </p>
      {{  form.date() }}
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

脚本文件

from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from wtforms import StringField, DateTimeField,  BooleanField
from wtforms.validators import Required
from data import ACTORS

app = Flask(__name__)
app.config['SECRET_KEY'] = 'some?bamboozle#string-foobar' …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms

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