class MyForm(Form):
name = StringField(u'Full Name', [validators.required(), validators.length(max=10)])
address = TextAreaField(u'Mailing Address', [validators.optional(), validators.length(max=200)])
两个问题:
多少个field
classwtforms.fields.BooleanField(default field arguments, false_values=None)
classwtforms.fields.DateField(default field arguments, format='%Y-%m-%d')
classwtforms.fields.DateTimeField(default field arguments, format='%Y-%m-%d %H:%M:%S')
classwtforms.fields.DecimalField(default field arguments, places=2, rounding=None,use_locale=False, number_format=None)
classwtforms.fields.FileField(default field arguments)
class UploadForm(Form):
image = FileField(u'Image File', [validators.regexp(u'^[^/\\]\.jpg$')])
description = TextAreaField(u'Image Description')
def validate_image(form, field):
if field.data:
field.data = re.sub(r'[^a-z0-9_.-]', '_', field.data)def upload(request):
form = UploadForm(request.POST)
if form.image.data:
image_data = request.FILES[form.image.name].read()
open(os.path.join(UPLOAD_PATH, form.image.data), 'w').write(image_data)
classwtforms.fields.FloatField(default field arguments)
classwtforms.fields.IntegerField(default field arguments)
classwtforms.fields.RadioField(default field arguments, choices=, []coerce=unicode)
classwtforms.fields.SelectField(default field arguments, choices=, []coerce=unicode,option_widget=None)
静态
class PastebinEntry(Form):
language = SelectField(u'Programming Language', choices=[('cpp', 'C++'), ('py', 'Python'), ('text', 'Plain Text')])
动态
class UserDetails(Form):
group_id = SelectField(u'Group', coerce=int)def edit_user(request, id):
user = User.query.get(id)
form = UserDetails(request.POST, obj=user)
form.group_id.choices = [(g.id, g.name) for g in Group.query.order_by('name')]
classwtforms.fields.SelectMultipleField(default field arguments, choices=, []coerce=unicode, option_widget=None)
classwtforms.fields.SubmitField(default field arguments)
classwtforms.fields.StringField(default field arguments)
classwtforms.fields.HiddenField(default field arguments)
classwtforms.fields.PasswordField(default field arguments)
classwtforms.fields.TextAreaField(default field arguments)
验证规则
classwtforms.validators.ValidationError(message=u'', *args, **kwargs)
classwtforms.validators.StopValidation(message=u'', *args, **kwargs)
classwtforms.validators.DataRequired(message=None)
classwtforms.validators.Email(message=None)
classwtforms.validators.EqualTo(fieldname, message=None)
class ChangePassword(Form):
password = PasswordField('New Password', [InputRequired(), EqualTo('confirm', message='Passwords must match')])
confirm = PasswordField('Repeat Password')
classwtforms.validators.InputRequired(message=None)
classwtforms.validators.IPAddress(ipv4=True, ipv6=False, message=None)
classwtforms.validators.Length(min=-1, max=-1, message=None)
classwtforms.validators.MacAddress(message=None)
classwtforms.validators.NumberRange(min=None, max=None, message=None)
classwtforms.validators.Optional(strip_whitespace=True)
classwtforms.validators.Regexp(regex, flags=0, message=None)
classwtforms.validators.URL(require_tld=True, message=None)
classwtforms.validators.UUID(message=None)
classwtforms.validators.AnyOf(values, message=None, values_formatter=None)
classwtforms.validators.NoneOf(values, message=None, values_formatter=None)
自定义验证:
简单方式
class MyForm(Form):
name = StringField('Name', [InputRequired()])
def validate_name(form, field):
if len(field.data) > 50:
raise ValidationError('Name must be less than 50 characters')
重用模式
def my_length_check(form, field):
if len(field.data) > 50:
raise ValidationError('Field must be less than 50 characters')class MyForm(Form):
name = StringField('Name', [InputRequired(), my_length_check])
扩展优化
def length(min=-1, max=-1):
message = 'Must be between %d and %d characters long.' % (min, max)
def _length(form, field):
l = field.data and len(field.data) or 0
if l < min or max != -1 and l > max:
raise ValidationError(message)
return _lengthclass MyForm(Form):
name = StringField('Name', [InputRequired(), length(max=50)])
继续扩张优化
class Length(object):
def __init__(self, min=-1, max=-1, message=None):
self.min = min
self.max = max
if not message:
message = u'Field must be between %i and %i characters long.' % (min, max)
self.message = message
def __call__(self, form, field):
l = field.data and len(field.data) or 0
if l < self.min or self.max != -1 and l > self.max:
raise ValidationError(self.message)length = Length