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-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)
感谢帮助。
我正在使用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字段)表示为选择字段吗?
我正在使用(很棒的)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添加到输入字段?
我有三个表:components,attributes和attribute_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) 我正在使用jinja呈现flask-wtf提交按钮,如下所示:
{{ wtf.form_field(form.submit) }}
Run Code Online (Sandbox Code Playgroud)
这导致按钮格式化为btn-default bootstrap格式(白色).我想将其更改为btn-success bootstrap格式(绿色).
我怎样才能做到这一点?
我目前正在使用以下jinja2模板渲染多个Flask字段(SelectFields,InputFields):
<div>{{ wtf.form_field(form.blockingProbability) }}</div>
Run Code Online (Sandbox Code Playgroud)
结果为以下格式:

我想控制下拉列表的宽度(更窄的宽度,看起来更自然,方法),但是(毫不奇怪)当我尝试通过控制div宽度来做到这一点时,整个字段(包括标签和标签文本)受到限制环绕。
有什么方法可以控制下拉字段(和其他输入字段)的宽度,同时保持标签的宽度不变(未包装)?
我想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) 我想使用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) 我最近很好奇使用WTForms向烧瓶提交数据的好处是什么?简单的HTML,JavaScript或引导程序表单看起来更容易,更容易提交.另外,您可以省略创建WTForms类所需的所有python代码.有人可以解释一个优势是什么?