标签:except checkbox not alt lazy compile 一次循环 词汇 号码
1 在定义的form类中写下面的方法: 2 #局部钩子 clean_字段名称 , 3 def clean_name(self): 4 value = self.cleaned_data[‘name‘] 5 if ‘大壮‘ in value: 6 raise ValidationError(‘含有敏感词汇:大壮‘) 7 else: 8 return value 9 10 11 12 #全局钩子 13 def clean(self): 14 value = self.cleaned_data 15 p1 = value[‘password‘] 16 p2 = value[‘r_password‘] 17 if p1 == p2: 18 return value 19 else: 20 # raise ValidationError(‘两次输入的密码不一致!‘) 21 self.add_error(‘r_password‘,‘两次输入的密码不一致!‘) #给某个字段单独添加报错信息 22 raise ValidationError(‘两次输入的密码不一致!‘) 23 24 25 循环所有字段进行验证,首先完成该字段实例化的时候的属性验证min_length=6,例如:Charfield(min_length=6),然后通过反射执行该字段的局部钩子,然后进行下一次循环,完成该字段实例化的时候的属性验证min_length=6,例如:Charfield(min_length=6),然后通过反射执行该字段的局部钩子,循环结束,self.clean_data里面有各个字段的数据,然后执行全局钩子
中间件的五个方法
1 process_request(self,request) 2 process_view(self, request, view_func, view_args, view_kwargs) 3 process_template_response(self,request,response) 4 process_exception(self, request, exception) 5 process_response(self, request, response)
process_view:
process_exception:视图函数出错,会执行
process_template_response:
1 def index(request): 2 print("app01 中的 index视图") 3 #raise ValueError(‘出错啦‘) 4 def render(): 5 print("in index/render") 6 #raise ValueError(‘出错啦‘) #至于render函数中报错了,那么会先执行process_template_response方法,然后执行process_exception方法,如果是在render方法外面报错了,那么就不会执行这个process_template_response方法了。 7 return HttpResponse("O98K") #返回的将是这个新的对象 8 rep = HttpResponse("OK") 9 rep.render = render 10 return rep
1 生成页面HTML标签
2 校验用户提交的数据合法性
3 保留用户输入的数据
1 from django import forms 2 3 def mobile_validate(value): value是要被校验的数据 4 mobile_re = re.compile(r‘^13[0-9]{9}‘) 5 if not mobile_re.match(value): 6 raise ValidationError(‘手机号码格式错误‘) #别忘了raise错误 7 8 9 class MyForm(forms.Form): 10 name = forms.CharField( 11 required=True, #默认等于True,内容不能为空 12 min_length=6, #最小长度为6 13 label=‘用户名‘, #标识 14 initial=‘高杰DSB‘, #初始值,默认值 15 # validators=[RegexValidator(r‘^金瓶‘,‘没看过金梅,不能通过‘),RegexValidator(r‘红旭妹妹$‘,‘没看过红旭妹妹,不能通过‘),], #写自定义校验规则,RegexValidator(正则,错误信息) 16 # validators=[mobile_validate,], #写自定义校验规则,RegexValidator(函数名称,) 17 help_text=‘这是输入用户名的地方,不能太短!‘, 18 error_messages={‘required‘:‘不能为空!‘,‘min_length‘:‘太短了!‘}, 19 # widget=forms.widgets.TextInput(attrs={‘class‘:‘form-control‘}), 20 widget=forms.widgets.TextInput, 21 ) 22 password = forms.CharField( 23 min_length=8, 24 max_length=10, #最大长度不能超过10位 25 label=‘密码‘, 26 widget=forms.widgets.PasswordInput(), #密文输入 27 ) 28 29 radio单选框: 30 sex = forms.ChoiceField( 31 label=‘性别‘, 32 initial=3, #初始值 33 choices=((1, "男"), (2, "女"), (3, "保密")), 34 widget=forms.widgets.RadioSelect(), 35 36 ) 37 select下拉单选框 38 city = forms.ChoiceField( 39 label=‘性别‘, 40 initial=3, 41 choices=((1, "北京"), (2, "上海"), (3, "东莞")), 42 widget=forms.widgets.Select(), 43 44 ) 45 46 checkbox多选框 47 hobby = forms.MultipleChoiceField( 48 label=‘爱好‘, 49 50 choices=((1, "抽烟"), (2, "喝酒"), (3, "烫头")), 51 widget=forms.widgets.CheckboxSelectMultiple, 52 53 ) 54 55 select下拉多选框 56 girls = forms.MultipleChoiceField( 57 label=‘爱好‘, 58 59 choices=((1, "红旭妹妹"), (2, "相玺哥哥"), (3, "程根姐姐")), 60 widget=forms.widgets.SelectMultiple, 61 62 ) 63 64 单选checkbox 65 status = forms.ChoiceField( 66 label=‘remeber me!!‘, 67 68 choices=((‘True‘, "红旭妹妹"), (‘False‘, "相玺哥哥")), 69 widget=forms.widgets.CheckboxInput, 70 71 ) 72 73 #给标签加属性 74 widget=forms.widgets.TextInput(attrs={‘class‘:‘c1‘,‘type‘:‘date‘}),
标签:except checkbox not alt lazy compile 一次循环 词汇 号码
原文地址:https://www.cnblogs.com/ch2020/p/13333970.html