标签: wtforms

WTForms错误:TypeError:formdata应该是一个multidict类型的包装器

from wtforms import Form, BooleanField, TextField, validators,PasswordField
class LoginForm(Form):
    username     = TextField('Username', [validators.Length(min=4, max=25)])
    password = PasswordField('Password')
Run Code Online (Sandbox Code Playgroud)

当我在webapp(gae)上使用LoginForm时,如下所示:

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

但它显示错误:

Traceback (most recent call last):
  File "D:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 513, in __call__
    handler.post(*groups)
  File "D:\zjm_code\forum_blog_gae\main.py", line 189, in post
    form=LoginForm(self.request)
  File "D:\zjm_code\forum_blog_gae\wtforms\form.py", line 161, in __call__
    return type.__call__(cls, *args, **kwargs)
  File "D:\zjm_code\forum_blog_gae\wtforms\form.py", line 214, in __init__
    self.process(formdata, obj, **kwargs)
  File "D:\zjm_code\forum_blog_gae\wtforms\form.py", line 85, in process
    raise TypeError("formdata should be a multidict-type wrapper that supports the 'getlist' method")
TypeError: …
Run Code Online (Sandbox Code Playgroud)

python wtforms

4
推荐指数
1
解决办法
5021
查看次数

python Flask应用程序验证文本字段-不允许有空格

我在 python-flask-username 字段中的应用程序对长度进行了验证。但是我想防止用户名内的空格怎么实现呢?

 class RegistrationForm(Form):
   username = TextField('Username', [validators.Length(min=4, max=25)])
   email = TextField('Email Address', [validators.Email(message='Invalid email address.')])
Run Code Online (Sandbox Code Playgroud)

感谢帮助。

python flask wtforms

4
推荐指数
1
解决办法
3818
查看次数

如何自定义WTForm model_form字段映射?

我正在使用Flask with Wtforms(和Flask-WTF)来为模型CRUD创建表单.我遇到了一个我今天无法弄清楚的问题,主要是:

给定以下常量定义:

ADMIN = 0
STAFF = 1
USER = 2
ROLE = {
    ADMIN: 'admin',
    STAFF: 'staff',
    USER: 'user'}
Run Code Online (Sandbox Code Playgroud)

并给出以下模型:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(80))
    last_name = db.Column(db.String(80))
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    password = db.Column(db.String(160))
    role = db.Column(db.SmallInteger, default=USER.USER)
    status = db.Column(db.SmallInteger, default=USER.NEW)
Run Code Online (Sandbox Code Playgroud)

并给出以下表单生成代码:

UserEdit = model_form(models.User, base_class=Form, exclude=['password'])
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议修改表单生成,将role(SmallInteger字段)表示为选择字段吗?

python flask wtforms flask-wtforms

4
推荐指数
1
解决办法
1964
查看次数

如何在 Python WTForms 库中使用 Bootstrap 工具提示?

我正在使用(很棒的)Flask 框架WTForms 插件构建一个网站。我现在想在输入字段的焦点上使用显示Bootstrap 工具提示在此处工作),但为此我必须为输入标签提供data-toggleandtitle属性,如下所示:

<input data-toggle="tooltip" title="tooltip on focus!" type="text" placeholder="Focus me!" name="thename"/>
Run Code Online (Sandbox Code Playgroud)

所以我只是将它们添加到表达式中:

{{ form.plotting_value(title='tooltip on focus!', data-toggle='tooltip', class='form-control') }}
Run Code Online (Sandbox Code Playgroud)

title属性是没有问题的,但data-toggle导致

TemplateSyntaxError:函数调用表达式的语法无效

有谁知道我如何data-toggle使用 WTForms添加到输入字段?

python jinja2 flask wtforms twitter-bootstrap

4
推荐指数
1
解决办法
2660
查看次数

使WTForms从数据库模型设置字段标签

我有三个表:componentsattributesattribute_values。每个组件可以具有许多attribute_values。每个attribute_value属于一个属性。是的,这是可怕的EAV模式...

我创建了以下两种形式:

class AttributeValueForm(Form):
    attribute = HiddenField()
    value = StringField('Value')

class ComponentForm(Form):
    ... non-related fields left out ...
    attribute_values = FieldList(FormField(AttributeValueForm))
Run Code Online (Sandbox Code Playgroud)

这些是SQLAlchemy模型:

class Component(db.Model):
    __tablename__ = 'components'
    id = db.Column(db.Integer, primary_key=True)
    ... non-related columns left out ...

class AttributeValue(db.Model):
    __tablename__ = 'attribute_values'
    id = db.Column(db.Integer, primary_key=True)
    value = db.Column(db.String)

    attribute_id = db.Column(db.Integer, db.ForeignKey('attributes.id'))
    attribute = db.relationship('Attribute', backref='attribute_values'))

    component_id = db.Column(db.Integer, db.ForeignKey('components.id'))
    component = db.relationship('Component', backref='attribute_values'))

def Attribute(db.Model):
    __tablename__ …
Run Code Online (Sandbox Code Playgroud)

entity-attribute-value flask wtforms

4
推荐指数
1
解决办法
2613
查看次数

使用bootstrap格式化flask-wtf提交按钮

我正在使用jinja呈现flask-wtf提交按钮,如下所示:

{{ wtf.form_field(form.submit) }}
Run Code Online (Sandbox Code Playgroud)

这导致按钮格式化为btn-default bootstrap格式(白色).我想将其更改为btn-success bootstrap格式(绿色).

我怎样才能做到这一点?

html jinja2 wtforms twitter-bootstrap flask-wtforms

4
推荐指数
3
解决办法
3225
查看次数

有没有一种方法可以控制wtf.form_field输入字段的宽度而不影响标签宽度?

我目前正在使用以下jinja2模板渲染多个Flask字段(SelectFields,InputFields):

<div>{{ wtf.form_field(form.blockingProbability) }}</div>
Run Code Online (Sandbox Code Playgroud)

结果为以下格式:

当前渲染

我想控制下拉列表的宽度(更窄的宽度,看起来更自然,方法),但是(毫不奇怪)当我尝试通过控制div宽度来做到这一点时,整个字段(包括标签和标签文本)受到限制环绕。

有什么方法可以控制下拉字段(和其他输入字段)的宽度,同时保持标签的宽度不变(未包装)?

jinja2 flask wtforms flask-wtforms

4
推荐指数
1
解决办法
5604
查看次数

在SelectField flask-WTForms中初始化后设置默认值

我想SelectField在向用户显示时预先选择值.default参数在实例化时传递,但在初始化字段后不起作用.

class AddressForm(Form):
    country = SelectField('Country',choices=[('GB', 'Great Britan'), ('US', 'United States')], default='GB')    # works
Run Code Online (Sandbox Code Playgroud)

当我default在将表单呈现给用户进行编辑之前尝试使用值来预选选项时,它不起作用.

address_form = AddressForm()
address_form.country.default='US'    # doesnot work
Run Code Online (Sandbox Code Playgroud)

需要一种解决方案,在呈现给用户之前将默认值设置为预设值.

场景2:也不起作用

class AddressForm(Form):
        country = SelectField('Country')    # works

address_form = AddressForm()
address_form.country.choices=[('GB', 'Great Britan'), ('US', 'United States')]
address_form.country.default='US'    # doesnot work
Run Code Online (Sandbox Code Playgroud)

python flask wtforms

4
推荐指数
2
解决办法
2799
查看次数

在Flask中的WTform中创建动态字段

我想使用WTForms和Jinja2在Flask中创建不同的表单.我调用mysql,它具有字段类型.

所以即表可以是:

 form_id   |  type         |   key    |    options      | default_value
    1      |  TextField    |   title  |                 |      test1
    1      |  SelectField  |   gender |{'male','female'}|      
    2      |  TextAreaField|   text   |                 |   Hello, World!
Run Code Online (Sandbox Code Playgroud)

然后我在form_id上查询.然后我想创建一个带有WTforms的表单,其中包含返回的行的字段.

对于正常形式我做:

class MyForm(Form):

    title = TextField('test1', [validators.Length(min=4, max=25)])
    gender = SelectField('', choices=['male','female'])


def update_form(request):

     form = MyForm(request.form)

     if request.method == 'POST' and form.validate():
          title = form.title.data
          gender = form.gender.data

          #do some updates with data
          return .....
     else:
          return render_template('template.html',form)
          #here should be something like:
          #dict = …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms

4
推荐指数
1
解决办法
4325
查看次数

为什么使用WTForms而不是仅使用HTML发布

我最近很好奇使用WTForms向烧瓶提交数据的好处是什么?简单的HTML,JavaScript或引导程序表单看起来更容易,更容易提交.另外,您可以省略创建WTForms类所需的所有python代码.有人可以解释一个优势是什么?

python wtforms

4
推荐指数
1
解决办法
1077
查看次数