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)
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
= 'zh-hans'
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
):
obj
=HttpResponse
('ok')
obj
.set_cookie
('name','egon')
obj
.set_cookie
('age','19')
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