140 form自定錯誤和鉤子,django中cookie的使用
昨日回顧
1 分頁器元件,django提供給我們麼一個類,傳入要分頁的資料,每頁有多少資料
-Paginator分頁器物件:count,get_page,num_pages,page_range
-Page物件:has_next,has_previous,next_page_number,previous_page_number,object_list
2 form 元件:可以做資料校驗
-自己定義一個類,繼承Form,在類裡寫欄位
-name=form.CharField()
-欄位屬性:required=False, max_length=32, min_length=3,label='使用者名稱'
-在檢視函式中使用,例項化得到一個Form物件,傳入要校驗的資料
-Form物件.is_valid()
-Form物件.clean_data :字典,不管成功與失敗,都能拿到clean_data
-Form物件.errors :字典,重寫了__str__方法,本質是字典
-Form物件.errors.get('name')--->錯誤資訊,多條,列表
-errors物件有些方法,as_data,as_json....
3 form 元件:渲染頁面
-模板中:自己寫標籤
-例項化得到一個空Form物件
-在模板中:
{{form.name.label}}
{{form.name}}
-在模板中:
{% for foo in form %}
<p>{{ foo.label }} :{{ foo }}</p>
{% endfor %}
-在模板中:
{{ form.as_p }}
-生成的標籤:<input type="text" name="name" maxlength="32" minlength="3" id="id_name" />
-生成的id 是id_欄位名
今日內容
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 form元件引數配置
# 定製模板中的顯示樣式,及配置類
# 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
擴充
https://www.cnblogs.com/liuqingzheng/articles/8980355.html
企業級什麼意思
Apache協議
作業
1 form元件的原始碼,找出區域性鉤子和全域性鉤子的位置
欄位自己的校驗完成後才執行區域性鉤子,
為什麼名字一定要叫clean_欄位名,
為什麼校驗失敗丟擲ValidationError,
為什麼成功要把欄位值返回,
為什麼全域性鉤子是在以上所有校驗通過才走,
為什麼全域性鉤子返回一個自己寫的字典,
在檢視函式中拿到的就是返回的
2 通過form元件實現使用者註冊功能(樣式好看,錯誤渲染,widgets,名字內不能帶sb,個人簡介裡不能有 敏感詞)
3 寫3個路由和檢視函式,一個是登入,寫入cookie,訪問order,必須登入以後才能訪問,否則重定向到登入頁面,退出功能,
4 (擴充)寫個登入認證裝飾器,載入order檢視函式上
相關文章
- day93:flask:Cookie&Session&請求鉤子&捕獲錯誤&上下文&Flask-ScriptFlaskCookieSession
- Django ModelForm中使用鉤子函式校驗資料DjangoORM函式
- Django form在模版中的渲染方式DjangoORM
- JVM鉤子函式的使用JVM函式
- 系統鉤子的使用 (轉)
- 10個有用的自定義鉤子vue.jsVue.js
- django專案基於鉤子驗證的註冊功能Django
- WordPress開發入門08:自定義函式和WordPress鉤子函式
- Django框架之Cookie和SessionDjango框架CookieSession
- Django Forms元件,展示使用者輸入不合規的提示資訊,鉤子函式DjangoORM元件函式
- 自定義jsp中的錯誤頁面JS
- Django Form元件DjangoORM元件
- 07 Django的Form模組DjangoORM
- [Django REST framework - 序列化元件、source、鉤子函式]DjangoRESTFramework元件函式
- ThinkPHP框架中自定義錯誤頁面和提示頁面PHP框架
- Django(33)Django操作cookieDjangoCookie
- 在學習和使用rman過程中的坑和錯誤
- Django教程(三) Django表單FormDjangoORM
- 對Angular中的生命週期鉤子的理解Angular
- 有關windows鉤子使用的兩篇文章Windows
- Django基礎六之cookie和sessionDjangoCookieSession
- 【譯】“錯誤”的使用 Swift 中的 ExtensionSwift
- Django的Form機制詳解DjangoORM
- 07.Django中的自定義認證方式和許可權的設計與使用Django
- vue-router的鉤子Vue
- React setState和修改props觸發的鉤子React
- Django Cookie與SessionDjangoCookieSession
- 深入理解 Nuxt.js 中的 app:created 鉤子UXJSAPP
- 深入理解 Nuxt.js 中的 app:error 鉤子UXJSAPPError
- Nuxt.js 應用中的 vite:serverCreated 事件鉤子UXJSViteServer事件
- cookie與session的區別以及在Django中的實現CookieSessionDjango
- django Form元件校驗流程DjangoORM元件
- django中orm的使用DjangoORM
- PHP系列之鉤子PHP
- React Hooks 鉤子特性ReactHook
- 鉤子(hook)是啥Hook
- 新建鉤子檔案
- 在使用Kafka過程中遇到的錯誤Kafka