WTForms 小计2 Field

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 argumentsfalse_values=None)

classwtforms.fields.DateField(default field argumentsformat='%Y-%m-%d')

classwtforms.fields.DateTimeField(default field argumentsformat='%Y-%m-%d %H:%M:%S')

classwtforms.fields.DecimalField(default field argumentsplaces=2rounding=None,use_locale=Falsenumber_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 argumentschoices=[]coerce=unicode)


classwtforms.fields.SelectField(default field argumentschoices=[]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 argumentschoices=[]coerce=unicodeoption_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(fieldnamemessage=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=Trueipv6=Falsemessage=None)

classwtforms.validators.Length(min=-1max=-1message=None)

classwtforms.validators.MacAddress(message=None)

classwtforms.validators.NumberRange(min=Nonemax=Nonemessage=None)

classwtforms.validators.Optional(strip_whitespace=True)

classwtforms.validators.Regexp(regexflags=0message=None)

classwtforms.validators.URL(require_tld=Truemessage=None)

classwtforms.validators.UUID(message=None)

classwtforms.validators.AnyOf(valuesmessage=Nonevalues_formatter=None)

classwtforms.validators.NoneOf(valuesmessage=Nonevalues_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


转载于:https://my.oschina.net/012345678/blog/295804

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值