可选验证器允许空值和该值不存在的情况(来自文档):
类 wtforms.validators.Optional(strip_whitespace=True)
允许空输入并停止验证链继续。
如果输入为空,还会从字段中删除先前的错误(例如处理错误)。
我在一个字段上有一些额外的验证器,我希望即使输入是空字符串,这些验证器也能运行。如果输入是空字符串,内置Optional验证器将跳过其余验证器。是否有内置或任何其他方式来实现这一目标?
我正在使用此表单来验证PUT请求。假设我有一个用户实体,其中usernames 作为 ID,middlenames 作为可选字段。那么字段的验证器将类似于:
class UserUpdateForm(Form):
username = fields.StringField('username', [
validators.Optional(),
validators.Length(min=5, max=500)
])
middlename = fields.StringField('middlename', [
validators.Optional()
])
Run Code Online (Sandbox Code Playgroud)
因此,我将允许PUT没有username或middlename参数的请求,并且这些请求将使字段保持不变。但是,当参数存在并且是空字符串时,我希望username字段验证由于Length验证器而失败,但我允许将该middlename字段设置为空字符串。
从另一个角度来看:我想区分不存在的参数和空字符串参数。
有没有办法将“onclick”传递到 WTForm 字段?我想根据是否选中 WTF 复选框来启用/禁用某个字段。但 WTForms 中的 HTML 不会创建或具有“onclick”参数。
我有一个表格:
class test(Form):
checkbox=BooleanField('Checkbox')
required=TextField('Required if checked')
Run Code Online (Sandbox Code Playgroud)
我有 JS:
function disablefld(){
cb=document.getElementById('checkbox').checked;
document.getElementById('required').disabled=!cb;
}
Run Code Online (Sandbox Code Playgroud)
为该复选框生成的 HTML WTForms 为:
<input id="checkbox" name="checkbox" type="checkbox" value="y">。它不起作用,因为onclick它不存在。
我已经尝试过checkbox=BooleanField('Checkbox', onclick="disablefld()"),但这是一个意想不到的争论。这是可能的还是我应该用纯 html 制作表单?
随POST请求提交表单后,每个Field数据都有其值,除了DateTimeLocalField. 访问 DateTimeLocalField 的数据值是一种None.
形式
class ArticleForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
category = SelectField(u'Category', choices=categories.choices)
town = StringField('Town', validators=[DataRequired()])
minimal_price = IntegerField('Minimal price')
article_image = FileField('Article_image', validators=[FileRequired()])
time_left = DateTimeLocalField('Time to end', validators=[InputRequired()],
format='%Y-%m-%d %H:%M:%S')
description = TextAreaField('Description', validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)
验证:(经测试is_submitted,除了所有的工作article_form.time_left.data是None)
if article_form.validate_on_submit():
new_article = Article(name=article_form.name.data,
category=article_form.category.data,
town=article_form.town.data,
minimal_price=article_form.minimal_price.data,
article_image=name,
time_left=article_form.time_left.data, # <-- None
description=article_form.description.data,
user_id=current_user.id)
Run Code Online (Sandbox Code Playgroud)
任何帮助获取数据DateTimeLocalField?
在我的烧瓶应用程序中,我有一个带有两个日期选择器的 WTForm,用于“开始日期”和“结束日期”。验证“结束日期”不早于“开始日期”的最佳方法是什么?
from flask_wtf import FlaskForm
from wtforms.fields.html5 import DateField
from wtforms import SubmitField
class Form(FlaskForm):
startdate_field = DateField('Start Date', format='%Y-%m-%d')
enddate_field = DateField('End Date', format='%Y-%m-%d')
submit_field = SubmitField('Simulate')
Run Code Online (Sandbox Code Playgroud)
我在这个主题上唯一发现的是这个验证器:
wtforms_html5.DateRange
Run Code Online (Sandbox Code Playgroud)
在这里找到:https : //pypi.org/project/wtforms-html5/0.1.3/ 但它似乎是 wtforms-html5 的旧版本。
我有一个WT表单,需要前端侧输入数据。目前,该表单允许用户输入所有日期,但当我创建一个仅允许输入未来日期的网站时,我想为此添加一个验证器,以不允许过去的日期。
我已经看过以前的问题,但是它们并没有太大帮助。
以下是我的 forms.py 的一部分
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, DateField
from wtforms.validators import DataRequired
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from ..models import TasterDay, Course
class TasterDayForm(FlaskForm):
"""
Form for admin to add or edit a taster day
"""
name = StringField('Name', validators=[DataRequired()])
date = DateField('Date (DD-MM-YYYY)', format='%d-%m-%Y')
course = StringField('Course', validators=[DataRequired()])
lecturer = StringField('Lecturer', validators=[DataRequired()])
description = StringField('Description', validators=[DataRequired()])
submit = SubmitField('Submit')
Run Code Online (Sandbox Code Playgroud)
这是我的views.py 文件中的一部分,其中显示了一些路线。
from flask import abort, flash, redirect, render_template, url_for
from flask_login import current_user, …Run Code Online (Sandbox Code Playgroud) 我正在使用带有Flask的wtforms,并且有一个电子邮件输入框。我想验证电子邮件条目,但也将其作为非必填字段。用户可以忽略它,但如果他们输入它,我想确保它通过 wtforms 的电子邮件验证器。
理想情况下,我想要这样的东西:
email = StringField('Email', validators=[Email(), DataNotRequired()])
Run Code Online (Sandbox Code Playgroud)
或者
email = StringField('Email', validators=[Email(required=False)])
Run Code Online (Sandbox Code Playgroud)
我想使用 Flask-WTforms 实现这一目标的唯一可能方法是创建一个自定义 验证器。在这种情况下,有没有办法在我的自定义验证器中利用 Email() 验证器,这样我就不必重新实现它?
像这样的东西:
def validate_email(form, field):
if len(field.data) > 0:
if (not Email(field.data)):
raise ValidationError('Email is invalid')
Run Code Online (Sandbox Code Playgroud) 我有一个简单的无线电字段,它总是导致validate_on_submit返回false.当我打印form.errors时,看起来"无效的选择"作为无线电字段中的值传递,尽管coerce = int.
我不认为我正在破坏表格中返回的任何东西,我希望以正确的方式创造动态选择.我不明白为什么会失败.
以下是我的项目的相关部分 - 任何建议表示赞赏.
forms.py:
class SelectRecord(Form):
rid = RadioField("Record Select", choices=[], coerce=int,validators=[InputRequired()])
Run Code Online (Sandbox Code Playgroud)
views.py:
@mod.route('/select/', methods=('GET', 'POST'))
@login_required
def select_view():
form = SelectRecord(request.form)
if form.validate_on_submit():
rid = form.data.rid
if form['btn'] == "checkout":
# check out the requested record
Records.checkoutRecord(rid)
return render_template('/records/edit.html',rid=rid)
elif form['btn'] == "checkin":
Records.checkinRecord(rid)
flash("Record checked in.")
else:
mychoices = []
recs_co = session.query(Records.id).filter(Records.editing_uid == current_user.id). \
filter(Records.locked == True)
for x in recs_co:
mychoices.append((x.rid,"%s: %s (%s)" % (x.a, x.b, x.c, x.d)))
x = getNextRecord() …Run Code Online (Sandbox Code Playgroud) 我使用了http://flask.pocoo.org/snippets/60/中的代码片段,通过Flask中的模型创建了WTForms表单。除了仅创建输入字段的事实以外,其他所有方法都工作正常。我希望说明(请参见下面的models.py)成为文本区域。有任何想法吗?
从models.py:
title = db.Column(db.String(55))
description = db.Column(db.Text)
Run Code Online (Sandbox Code Playgroud)
从views.py
MyForm = model_form(MyModel, base_class=Form)
form = MyForm()
return render_template('create.html', form=form)
Run Code Online (Sandbox Code Playgroud)
来自create.html
{% for field in form %}
{{field.label}}
{{field}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
输出:
<input id="title" name="title" type="text" value="">
<input id="description" name="description" type="text" value="">
Run Code Online (Sandbox Code Playgroud)
我想要的是:
<input id="title" name="title" type="text" value="">
<textarea id="description" name="description"></textarea>
Run Code Online (Sandbox Code Playgroud) 我有一个WTForm这样的课:
class MyForm(Form):
field1 = HiddenField(default=0, validators=NumberRange(min=0, max=20)])
Run Code Online (Sandbox Code Playgroud)
将此标记视为由.呈现 WTForms
<input type='hidden' name='field1' value='5'></input>
Run Code Online (Sandbox Code Playgroud)
这不通过NumberRange验证.这是因为HiddenFields widget类将该value属性强制转换为字符串.如何WTForms生成此标记,以便我可以在后续执行数字验证POST?
在常规HTML中,您可以将多个字段POST到数组:
<input type="text" name="arr[]">
<input type="text" name="arr[]">
<input type="text" name="arr[]">
<input type="text" name="arr[]">
Run Code Online (Sandbox Code Playgroud)
如何从WTForms获得此功能?基本上,我有一个用户的表单,然后单击小加号和减号按钮来添加或删除表单中的字段.