欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-03 23:20:20
...

使用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=从数据库查询的值