django_day07
django form组件
-
form组件的定义
class RegForm(forms.Form): user = forms.CharField(label='用户名') pwd = forms.CharField(label='密码')
-
使用
def reg2(request): form_obj = RegForm() if request.method == 'POST': #对提交的数据做校验 form_obj = RegForm(request.POST) if form_obj.is_valid():#对数据进行校验 #校验成功 return HttpResponse('注册成功') return render(request,'reg2.html',{'form_obj':form_obj})
-
模板
{{ form_obj.as_p }} 一次性生成所有的input框 {{ form_obj.user }} 生成该字段的input框 {{ form_obj.user.label }} 该字段提示的信息 {{ form_obj.user.id_for_label }} 该字段的input框的id {{ form_obj.errors }} 所有字段的错误 {{ form_obj.user.errors.0 }} 该字段的错误
-
常用字段
CharField 文本输入框 ChoiceField 单选 默认是select MultipleChoiceField 多选 默认是select
-
字段参数
initial = "张三" 默认值 choices 用户选择数据 error_messages={} 自定义错误信息 widget=forms.PasswordInput 修改input框的类型 required=False, 是否必填 disabled=False, 是否禁用
-
校验
-
校验器
def check_name(value): #不符合规则 if 'lsl' in value: raise ValidationError("德玛西亚") #捕获错误i #符合规则不做任何操作 user = forms.CharField( .... validators=[check_name],#校验器 ... )
-
使用内置的校验器
from django.core.validators import RegexValidator phone = forms.CharField(validators=[RegexValidator(r'^1[3-9]d{9}$','手机号格式不正确')])
-
钩子函数
-
局部钩子
#写在类里面 def clean_user(self):#局部钩子 #不符合校验规则 value = self.cleaned_data.get('user') if 'lsl' in value: raise ValidationError("德玛西亚") # 捕获错误i #符合校验规则 return value
-
全局钩子
def clean(self):#全局钩子 #不符合校验规则 pwd = self.cleaned_data.get('pwd') re_pwd = self.cleaned_data.get('re_pwd') if pwd != re_pwd: #将错误信息加入某个字段里面 self.add_error('re_pwd','两次密码不一致') raise ValidationError('两次密码不一致') #符合校验规则 return self.cleaned_data
-
-