运行以下代码进行表单验证时出现异常。
File "/Users/homeduvvuri/Documents/Learning/PartyGoUdemy/PartGo/user/forms.py", line 11, in BaseUserForm
email = EmailField('Email', [validators.DataRequired(), validators.Email()])
File "/Users/homeduvvuri/Documents/Learning/PartyGoUdemy/PartGo/partgo-env/lib/python3.7/site-packages/wtforms/validators.py", line 332, in __init__
raise Exception("Install 'email_validator' for email validation support.")
Exception: Install 'email_validator' for email validation support.
Run Code Online (Sandbox Code Playgroud)
在 codeanywhere VM 上完美运行。不在本地机器上。
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
from wtforms import Form, StringField, PasswordField, validators, ValidationError
from wtforms.validators import InputRequired, Email
from wtforms.fields.html5 import EmailField
from wtforms.widgets import TextArea
from user.models import User
class BaseUserForm(FlaskForm):
name = StringField('Name', [validators.DataRequired(), validators.Length(min=2, max=30)])
email = …Run Code Online (Sandbox Code Playgroud) 我想在WTForms中的字段上添加一个占位符属性.我该怎么做?
abc = TextField('abc', validators=[Required(), Length(min=3, max=30)], placeholder="test")
Run Code Online (Sandbox Code Playgroud)
以上代码无效
如何添加具有值的占位符属性?
我正在使用wtforms(和flask)生成动态表单.我想在我正在生成的字段中添加一些自定义css类,但到目前为止我一直无法这样做.使用我在这里找到的答案,我试图使用自定义小部件来添加此功能.它的实现方式几乎与该问题的答案完全相同:
class ClassedWidgetMixin(object):
"""Adds the field's name as a class.
(when subclassed with any WTForms Field type).
"""
def __init__(self, *args, **kwargs):
print 'got to classed widget'
super(ClassedWidgetMixin, self).__init__(*args, **kwargs)
def __call__(self, field, **kwargs):
print 'got to call'
c = kwargs.pop('class', '') or kwargs.pop('class_', '')
# kwargs['class'] = u'%s %s' % (field.name, c)
kwargs['class'] = u'%s %s' % ('testclass', c)
return super(ClassedWidgetMixin, self).__call__(field, **kwargs)
class ClassedTextField(TextField, ClassedWidgetMixin):
print 'got to classed text field'
Run Code Online (Sandbox Code Playgroud)
在View中,我这样做是为了创建字段(ClassedTextField是从表单导入的,f是基本表单的一个实例):
f.test_field = forms.ClassedTextField('Test Name') …Run Code Online (Sandbox Code Playgroud) 当尝试使用WTForms设置SelectField的默认值时,我将值传递给'default'参数,就像这样.
class TestForm(Form):
test_field = SelectField("Test: ", choices=[(1, "Abc"), (2, "Def")], default=2)
Run Code Online (Sandbox Code Playgroud)
我也试过以下.
class TestForm(Form):
test_field = SelectField("Test: ", choices=[(1, "Abc"), (2, "Def")], default=(2, "Def"))
Run Code Online (Sandbox Code Playgroud)
既不将默认的选定字段设置为"Def".这适用于其他类型的字段,如TextField.如何设置SelectField的默认值?'
我想要一个表单验证库
1.从表单验证中生成单独的html;
2.验证错误可以很容易地序列化,例如.作为json对象转储
你会在python web项目中选择什么形式的验证库?
我目前正在使用WTFORMS创建一个动态选择字段,但它永远不会提交并且验证失败并出现以下错误.
Not a valid choice
Run Code Online (Sandbox Code Playgroud)
我的字段是这样创建的:
area = SelectField()
Run Code Online (Sandbox Code Playgroud)
在视图中,我从数据库抓取选项,如下所示:
form = MytestForm()
form.area.choices = [(a.id, a.name) for a in Area.objects.all()]
Run Code Online (Sandbox Code Playgroud)
但是,如果我创建静态选项,它会工作.
我正在使用Flask-WTF:
这是我的表格:
from flask.ext.wtf import Form, TextField
class BookNewForm(Form):
name = TextField('Name')
Run Code Online (Sandbox Code Playgroud)
这是控制器:
@book.route('/book/new', methods=['GET', 'POST'])
def customers_new():
form = BookNewForm()
if form.is_submitted():
print "submitted"
if form.validate():
print "valid"
if form.validate_on_submit():
flash("Successfully created a new book")
return redirect(url_for('.books_show'))
return render_template('views/books_new.html', form=form)
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如果你查看我的print语句,它总是打印提交,但它永远不会打印有效,并且从不执行validate_on_submit().为什么?
我的表单验证工作接近完成,我只有2个案例我不知道如何解决:1)当然应该要求密码字段,但我也提供了通过OAuth登录谷歌或Facebook帐户的可能性然后名称被预先填充但我从表单中完全删除密码字段是有用户(谷歌)或Facebook用户对象:
<tr><td>
<br /> {% if user or current_user %} {% else %}
<div class="labelform">
{% filter capitalize %}{% trans %}password{% endtrans %}{% endfilter %}:
</div>
</td><td> <div class="adinput">{{ form.password|safe }}{% trans %}Choose a password{% endtrans %}</div>{% endif %}
</td></tr>
Run Code Online (Sandbox Code Playgroud)
因此,对于已经登录且密码字段没有意义的用户,我需要一些逻辑来使该字段有条件地可选.我在想我可以为我的表单类中的logged_in +方法创建一个变量,例如:
class AdForm(Form):
logged_in = False
my_choices = [('1', _('VEHICLES')), ('2', _('Cars')), ('3', _('Bicycles'))]
name = TextField(_('Name'), [validators.Required(message=_('Name is required'))], widget=MyTextInput())
title = TextField(_('title'), [validators.Required(message=_('Subject is required'))], widget=MyTextInput())
text = TextAreaField(_('Text'),[validators.Required(message=_('Text is required'))], widget=MyTextArea())
phonenumber = TextField(_('Phone number'))
phoneview …Run Code Online (Sandbox Code Playgroud) 要使用WTForms使用指定数量的列和行渲染我的textareafield,如何设置列数和行数?我按照这个问题的说明进行操作但不起作用:
我尝试添加一个小部件,但它不起作用:
class AForm(Form):
name = TextField('Name', [validators.Length(min=4)])
title = TextField('Title', [validators.Length(min=4)])
text = TextAreaField('Text', widget=TextArea(row=70, cols=11))
phonenumber = TextField('Phone number')
phonenumberhide = BooleanField('Display phone number on site')
price = TextField('Price')
password = PasswordField('Password')
email = TextField('Email', [
validators.Length(min=6, message=_('Little short for an email address?')),
validators.Email(message=_('That\'s not a valid email address.'))
])
Run Code Online (Sandbox Code Playgroud)
TypeError:object.new()不带参数
我对wtforms和flask很新,并且正在搞乱selectfields并且出错了.表单本身在没有selectfield的情况下工作得很好但是有了它我得到以下错误:
错误:
....fields.py", line 386, in pre_validate
for v, _ in self.choices: TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud)
我看到了选择字段,所以它正在被渲染.我怀疑在POST上没有正确验证id并且没有返回任何内容.或者它与我的selectfield元组返回有关?我正在使用的ID字段是从GAE的ndb自动密钥().id()中提取的,这是相当长且令人讨厌的.可能是用于选择字段的id长度太长了?
谷歌搜索没有提供太多的确切问题所以我想发布在这里.相关代码如下.如果我遗失了什么,请告诉我
views.py代码:
@app.route('/new/post', methods = ['GET', 'POST'])
@login_required
def new_post():
form = PostForm()
if form.validate_on_submit():
post = Post(title = form.title.data,
content = form.content.data,
hometest = form.hometest.data,
author = users.get_current_user())
post.put()
flash('Post saved on database.')
return redirect(url_for('list_posts'))
form.hometest.choices = [ (h.key.id(),h.homename)for h in Home.query()]
return render_template('new_post.html', form=form)
Run Code Online (Sandbox Code Playgroud)
myforms.py:
class PostForm(Form):
title = wtf.TextField('Title', validators=[validators.Required()])
content = wtf.TextAreaField('Content', validators=[validators.Required()])
hometest = wtf.SelectField(u'Home …Run Code Online (Sandbox Code Playgroud)