标签: wtforms

如何构建一个具有重复元素的表单

标题真的没有说出来,因为我在总结这个问题时遇到了麻烦.所以这里有很长的解释:

假设我正在添加多个联系人信息,我有以下字段:

  • 联系人姓名
  • 联系方式(电子邮件,电话号码,即时消息)
    • 如果是电子邮件:显示电子邮件字段(假设此字段存在)
    • 如果是电话号码:显示电话号码字段
    • 如果是即时消息:显示文本字段

所以,马上,我将需要JavaScript在页面本身上完成此操作(添加或删除联系人字段),我很好.但是,由于我可以添加多个联系人(作为软件开发人员,我不知道用户想要添加多少联系人,可能是1,10或100)

所以我最大的问题是如何构建每个字段的名称之类的东西.我应该把所有东西都扔进去names[],contactmethods[]然后按顺序访问东西,或者是否有更好的解决方案.

此外,如果服务器开始验证这些信息,并发现一些格式错误的信息,我希望能够将客户端发送到服务器的数据发送回客户端,这样他们就不会丢失所有内容.进入.我将如何轻松实现这一目标?

一些背景信息:当前使用的技术(相关):

  • 烧瓶
  • jQuery的
  • WTForms

html python jquery flask wtforms

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

为什么这个烧瓶管理员总是没有通过验证?

状态字段显示3个选项,但始终在submisison上显示"Not a valid choice",无论选择哪个.

from website import app, db
from flask.ext import admin
from flask.ext.admin.contrib import sqlamodel
from wtforms.fields import SelectField


class Users(db.Model):
    id     = db.Column(db.Integer, primary_key=True)
    name   = db.Column(db.String(160), unique=True)
    status = db.Column(db.Integer)

    def __repr__(self):
        return self.name


class UsersAdmin(sqlamodel.ModelView):
    form_overrides = dict(status=SelectField)
    form_args = dict(
        status=dict(
            choices=[(0, 'Regular'), (1, 'Guest'), (2, 'Banned')],
        ))

admin = admin.Admin(app, 'Admin')
admin.add_view(UsersAdmin(Users, db.session))
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask wtforms

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

龙卷风和WTForms

我是第一次使用WTForms.使用WTForms在Tornado中验证POST请求下面是我的表单forms.py

class UserForm(Form):
    user = TextField('user', [validators.Length(min=23, max=23)])
Run Code Online (Sandbox Code Playgroud)

在tonado处理程序中我有

def post(self):
    form = UserForm(self.request.body)
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:formdata应该是一个支持'getlist'方法的multidict类型包装器"

我怎么能做这个工作?

python forms tornado python-2.7 wtforms

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

在wtForms中创建自定义字段

在我的表单中,我试图创建一个带有选择的自定义数组字段.

自定义表单字段:

class CustomField(Field):
    widget = TextInput()
    def _value(self):
        if self.data:
            return u', '.join(self.data)
        else:
            return u''

    def process_formdata(self, valuelist):
        if valuelist:
            self.data = [x.strip() for x in valuelist[0].split(',')]
        else:
            self.data = []
Run Code Online (Sandbox Code Playgroud)

实际表单调用自定义表单字段

class PostForm(Form):

    status = CustomField()
Run Code Online (Sandbox Code Playgroud)

每当我发布的数据PostForm,它调用自定义字段,但在任何不通过valuelistprocess_formatdata.自定义字段始终返回空列表.
我在这里遗漏了什么.

wtforms flask-wtforms

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

如何在模态上显示wtform验证错误

我在Twitter Bootstrap 3模式中有一个WTF表单,我需要验证.问题是,即使存在验证错误,用户提交表单时模式也会关闭.如果我再次单击触发模态的按钮,则会显示验证错误.所以我的问题是,当有验证错误时,如何让模态保持打开状态?谢谢!

<button type="button" class="btn btn-default" data-toggle="modal" role="dialog" data-target="#save"> 
<span class="glyphicon glyphicon-flash"></span>
</button>


<div class="modal fade" id="save" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
  <div class="modal-content">
   <div class="modal-header">
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
     <h3 class="modal-title" id="myModalLabel">Archive List and Start New</h3>
    </div>

   <form role="form_list" class="form form-medium" action="." method="post">
   {{ form_save.csrf_token }}
    <div class="modal-body">    
        <h4>Save list as: </h4>
        {{ render_field(form_save.list_name, class="input-large") }}
    </div>

    <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <a href="#">
          <button class="btn btn-success">Archive List</button></a> 
    </div>
  </form>

  </div><!-- modal content --> …
Run Code Online (Sandbox Code Playgroud)

flask wtforms twitter-bootstrap-3

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

Flask wtf表单AttributeError:'Request'对象没有属性'POST'

我刚刚开始使用Flask进行编码,我想在我的应用程序中的小表单上设置CSRF.我正在关注此http://wtforms.readthedocs.org/en/2.0.2/csrf.html以进行基于会话的实施.我在网上浏览了一段时间以找到类似问题的解决方案,但我没有成功,如果这是一个重复的问题,请道歉.

这段代码的问题: 当我在虚拟环境中运行它时,我得到以下堆栈跟踪AttributeError: 'Request' object has no attribute 'POST'-

目标:在wtform实例上实现csrf

环境:wtf版本2.02,烧瓶0.10,venv与python 2.7

from flask import session, request
from flask.ext.wtf import Form
from wtforms import TextField, validators, SubmitField
from wtforms.validators import Required, Length
from wtforms.csrf.session import SessionCSRF
from datetime import timedelta
import config # my config file

# create super class

class MyForm(Form):
    class Meta:
        csrf = True
        csrf_class = SessionCSRF
        csrf_secret = config.secret_key
        csrf_time_limit = timedelta(minutes=20)

        @property
            def csrf_context(self):
                return request.session


# create a …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

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

WTForms BooleanField将JSON false值视为true

我正在使用wtforms我的帖子请求处理数据.一个特定的发布请求发送包括布尔值的各种数据.

我的表单看起来像这样:

class EditFileForm(Form):
    title = StringField('title')
    shared = BooleanField('shared')
    fileID = IntegerField('fileID')
    userID = IntegerField('userID')
Run Code Online (Sandbox Code Playgroud)

我可以看到,当我收到请求时,数据如下所示:

data = MultiDict(mapping=request.json)
print(data)
>>MultiDict([(u'shared', False), (u'title', u'File5'), (u'userID', 1), (u'fileID', 16)])
Run Code Online (Sandbox Code Playgroud)

您可以看到布尔字段为"false",并且打印原始数据也显示出来但是,当我打印实际的表单字段时,我得到了真实.

print(form.shared.raw_data)
[False]
print(form.shared.data)
True
Run Code Online (Sandbox Code Playgroud)

我读到WTForms可能不知道如何处理错误的布尔值.这样做的正确方法是什么?用一个IntegerField代替?

我有另一个表单,其中booleanfield正在处理来自postgres数据库的错误布尔值.

python json flask wtforms flask-wtforms

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

Flask wtforms - “UnboundField”对象不可调用,动态字段将无法正确初始化

应用程序.py

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, FieldList, FormField

app = Flask(__name__)
app.config['SECRET_KEY'] = 'apple pie'


class BookForm(FlaskForm):
    book = StringField('book title')


class LibraryForm(FlaskForm):
    def __init__(self, min_entries=0, *args, **kwargs):
        super(LibraryForm, self).__init__(*args, **kwargs)
        self.books = FieldList(FormField(BookForm), min_entries=min_entries)

    library = StringField('Library name')
    books = FieldList(FormField(BookForm), min_entries=3)
    submit = SubmitField('Submit')


@app.route('/book', methods=['GET', 'POST'])
def book():
    form = LibraryForm(min_entries=5)
    if form.validate_on_submit():
        return 'aww yeah'
    return render_template('books.html', form=form)
Run Code Online (Sandbox Code Playgroud)

书籍.html

<html>
<form method="POST" action="">
    {{ form.hidden_tag() }}
    <div>{{ …
Run Code Online (Sandbox Code Playgroud)

flask wtforms flask-wtforms

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

如何向 WTForms 添加 Bootstrap 验证

我将 WTForms 与 Flask 结合使用,我想集成Bootstrap 表单验证来检查表单中的错误。我有一个基本的登录表单设置,如下所示:

class LoginForm(FlaskForm):
    """Login form."""

    email = EmailField(
        "Email Address", validators=[DataRequired(), Email(), Length(min=6, max=40)]
    )
    password = PasswordField(
        "Password", validators=[DataRequired()]
    )

    def __init__(self, *args, **kwargs):
        """Create instance."""
        super(LoginForm, self).__init__(*args, **kwargs)
        self.user = None

    def validate(self):
        """Validate the form."""
        initial_validation = super(LoginForm, self).validate()
        if not initial_validation:
            return False

        self.user = User.query.filter_by(email=self.email.data).first()
        if not self.user:
            self.email.errors.append("Unknown email address!")
            return False

        if not self.user.check_password(self.password.data):
            self.password.errors.append("Invalid password!")
            return False

        if not self.user.verified:
            self.email.errors.append("Please verify your email address!") …
Run Code Online (Sandbox Code Playgroud)

jinja2 flask python-3.x wtforms bootstrap-4

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