Day 12 forms渲染错误信息

it2025-06-01  9

Day 12 forms渲染错误信息

一、forms渲染错误信息

1.创建py文件

2.撰写py文件

字段描述

initial="张三" # 设置默认值

​ ``error_messages={​“required”: “不能为空”,​“invalid”: “格式错误”,​“min_length”: “用户名最短8位”​ } 触发限制是返回的自定义的错误信息,默认English

widget=forms.widgets.PasswordInput(attrs={'class': 'c1'}, render_value=True)

# 把密码框设置为password类型,并指定class为c1和c2的样式类 # 当出现出错时,其他类型的input框默认是保留你写的内容,只有密码框不会保存 # 想要密码框错误时也保留内容,就设置render_value=True from django import forms from django.forms import widgets class CheckUser(forms.Form): name = forms.CharField(label='名字', max_length=10, min_length=3, required=True, widget=widgets.TextInput(attrs={'class': 'form-control'}), error_messages={'min_length': '用户名太少了'}) password = forms.CharField(label='密码', max_length=18, min_length=6, required=True, widget=widgets.TextInput(attrs={'class': 'form-control'}), error_messages={'min_length': '密码强度过低'}) phone = forms.CharField(label='手机', max_length=11, min_length=11, required=True, widget=widgets.TextInput(attrs={'class': 'form-control'}), error_messages={'max_length': '手机格式不对', 'min_length': '手机格式不对'}) introduction = forms.CharField(label='简介', max_length=254, required=False, error_messages={'max_length': '简介过长'}, widget=widgets.Textarea(attrs={'class': 'form-control'}) )

3.在视图函数中应用

from app01 import myform def index(request): forms = myform.CheckUser() if request.method == 'POST': data = request.POST forms = myform.CheckUser(data) if forms.is_valid(): # 校验通过 print('校验通过准备存入数据库!') return redirect('http://www.baidu.com') return render(request, 'index.html', {'forms': forms})

4.模板文件

<div class="col-md-4 col-md-offset-4"> <form action="" method="post"> {% for form in forms %} <div class="form-group"> <label for="">{{ form.label }}</label> {{ form }} <span style="font:10px rgba(194,0,0,0.79);list-style-type: none">{{ form.errors }}</span></div> {% endfor %} <input type="submit" class="btn btn-info text-center" value="注册"> </form> </div>

修改错误信息

1.局部重写错误信息,哪个字段需要重写错误信息就在哪个字段设置 class LoginForm(forms.Form): username = forms.CharField( min_length=8, label="用户名", initial="张三", error_messages={ "required": "不能为空", "invalid": "格式错误", "min_length": "用户名最短8位" } ) pwd = forms.CharField(min_length=6, label="密码") 2.设置全局错误信息(把默认的错误信息由英文改成中文) 在settings.py里面设置 # LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' # 把语言改成中文(汉字) # TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Shanghai' # 时区改成亚洲上海

二、局部钩子和全局钩子

局部钩子的使用

1 在自定义的Form类中写 clean_字段名 2 取出字段的真正值,name=self.cleaned_data.get(‘name’) 3 判断自己的规则,如果判断失败,抛出ValidationError 4 如果通过,return name

局部钩子

写了两个只有两个了

def clean_name(self): name = self.cleaned_data.get('name') if name.startswith('sb'): raise ValidationError('不能以sb开头') else: # 校验通过 return name def clean_phone(self): phone = self.cleaned_data.get('phone') if re.match('\d+', phone): return phone else: raise ValidationError('手机格式不对!')

全局钩子

def clean(self): password = self.cleaned_data.get('password') repassword = self.cleaned_data.get('repassword') if password == repassword: return self.cleaned_data else: raise ValidationError('两次密码不一致')

执行顺序,先走局部钩子再进行全局钩子

三、cookie session token

1 https://www.cnblogs.com/liuqingzheng/articles/8990027.htmlp 2 cookie:客户端浏览器上的键值对 3 session:存在服务端的键值对 4 token:加密的键值对,如果放在客户端浏览器上,它就叫cookie, 服务端签发的加密字符串 head.{name:lqz,age:18}.eseetsweasdca base64加码: asdfasfd.asdfasdf.asdfasdfaeraew 后端校验: 用这个token去查我的账户余额,向银行发请求,银行校验通过,是银行给你的,---》返回你的余额 head.{name:lqz,age:18}.eseetsweasdca head.{name:egon,age:18}.eseetsweasdca

四、Django中cookie的使用

def cookie_test(request): # 浏览器向我这个地址发一个请求,就在浏览器写入 name = lqz obj=HttpResponse('ok') obj.set_cookie('name','egon') # 写入到浏览器了,在http响应头里:cookie: name=lqz obj.set_cookie('age','19') # 写入到浏览器了,在http响应头里:cookie: name=lqz return obj def get_cookie(request): print(request.COOKIES) print(request.COOKIES.get('name')) return HttpResponse('我拿了你传过来的cookie') def delete_cookie(request): obj=HttpResponse('我删掉了你 name 这个cookie ') obj.delete_cookie('name') return obj
最新回复(0)