Python3 之 Django Web框架Form组件(二)

来源:互联网 发布:ubuntu 休眠 编辑:程序博客网 时间:2024/06/07 01:07

使用Form组件步骤

1.首先自定义一个类,继承Form类;    from django.forms import Form    class TeacherForm(Form):2.在自定义类中添加类属性,这个属性要和models中的对应模型类的属性名一致,后面可以处理数据时方便;    name = fields.CharField(        required=True,        error_messages={'required': '用户名不能为空'},        widget=widgets.TextInput(attrs={'class': 'form-control', 'placeholder': '请输入用户名'}),        validators = [RegexValidators(正则表达式,不满足正则的提示)]    )3.定义函数处理已经通过Form组件验证的数据,可以处理一些用户名和密码和数据库的校验:    def clean_name():        return sth    需要注意的是:函数名必须以clean_开头,字段的值必须是当前字段的值,必须要有返回值;    该函数称为钩子函数,为什么要这么定义呢?看下源码就明白了:        if field.disabled:            value = self.get_initial_for_field(field, name)        else:            value = field.widget.value_from_datadict(self.data, self.files,self.add_prefix(name))        try:            if isinstance(field, FileField):                initial = self.get_initial_for_field(field, name)                value = field.clean(value, initial)            else:                value = field.clean(value)            self.cleaned_data[name] = value            if hasattr(self, 'clean_%s' % name):                value = getattr(self, 'clean_%s' % name)()                self.cleaned_data[name] = value        except ValidationError as e:            self.add_error(name, e)    在校验数据时,如果数据库没有就raise ValidationError('用户名或密码错误')4.下拉框的数据实时刷新怎么处理:    可以重写init方法:    __init__(self,*args,**kwargs):    super().__init__(*args,**kwargs)    self.fields['字段'].choices=从数据库查询的值
原创粉丝点击