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