1. 程式人生 > 實用技巧 >django框架之forms渲染錯誤資訊、全域性鉤子及cookie引入等相關內容-73

django框架之forms渲染錯誤資訊、全域性鉤子及cookie引入等相關內容-73

1 forms渲染錯誤資訊

1 form物件.errors 字典
2 name物件.errors

## 檢視函式
def register(request):
if request.method=='GET':
form=myforms.MyForm()
return render(request, 'register.html',{'form':form})
else:
form=myforms.MyForm(request.POST)
if form.is_valid():
return redirect('http://www.baidu.com')
else:
return render(request, 'register.html',{'form':form})
## 模板
<form action="" method="post" novalidate>
{% for foo in form %}
<div class="form-group">
<label for="">{{ foo.label }}</label>
{{ foo }}
<span class="text-danger pull-right">{{ foo.errors }}</span>
</div>
{% endfor %}
<div class="text-center">
<input type="submit" value="提交" class="btn btn-danger">
</div>
</form>

2 forms元件引數配置

# 定製模板中的顯示樣式,及配置類
# widget=widgets.PasswordInput(attrs={'class': 'form-control'})
# 錯誤資訊中文顯示
error_messages={'min_length': '太短了小夥子'}


class MyForm(forms.Form):
# 校驗這個欄位,最大長度是32,最小長度是3
name = forms.CharField(required=False, max_length=32, min_length=3, label='使用者名稱',
widget=widgets.TextInput(attrs={'class': 'form-control'}),
error_messages={'min_length': '太短了小夥子'})
password = forms.CharField(required=False, max_length=32, min_length=3, label='密碼',
widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
error_messages={'min_length': '太短了小夥子'})
re_password = forms.CharField(required=False, max_length=32, min_length=3, label='確認密碼',
widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
error_messages={'min_length': '太短了小夥子'})
email = forms.EmailField(label='郵箱', error_messages={'required': '小惠子,這個必填'},
widget=widgets.TextInput(attrs={'class': 'form-control'}))
age = forms.IntegerField(max_value=200, min_value=0, label='年齡',
widget=widgets.TextInput(attrs={'class': 'form-control'}))
text = forms.CharField(label='個人簡介', widget=widgets.Textarea(attrs={'class': 'form-control'}))
date = forms.CharField(label='出生日期', widget=widgets.DateInput(attrs={'class': 'form-control'}))



3 區域性鉤子和全域性鉤子

## 區域性鉤子的使用
# 1 在自定義的Form類中寫 clean_欄位名
# 2 取出欄位的真正值,name=self.cleaned_data.get('name')
# 3 判斷自己的規則,如果判斷失敗,丟擲ValidationError
# 4 如果通過,return name
# 區域性鉤子
def clean_name(self):
# name對應的值,如何取到?
name = self.cleaned_data.get('name')
if name.startswith('sb'):
# 不讓校驗通過
raise ValidationError('不能以sb開頭')
else:
# 校驗通過,返回name
return name
# 全域性鉤子
def clean(self):
# name=self.cleaned_data.get('name')
# print(name)
password = self.cleaned_data.get('password')
re_password = self.cleaned_data.get('re_password')
if password == re_password:
return self.cleaned_data
# return {'lqz':"nb"}
else:
raise ValidationError('兩次密碼不一致')

4 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

5 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