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框架之Cookie和SessionDjango框架CookieSession
- WordPress開發入門08:自定義函式和WordPress鉤子函式
- django專案基於鉤子驗證的註冊功能Django
- ThinkPHP框架中自定義錯誤頁面和提示頁面PHP框架
- C中的匯流排錯誤和段錯誤
- Django Form元件DjangoORM元件
- django中admin模組中修改密碼的formDjango密碼ORM
- [Django REST framework - 序列化元件、source、鉤子函式]DjangoRESTFramework元件函式
- Django Forms元件,展示使用者輸入不合規的提示資訊,鉤子函式DjangoORM元件函式
- Django(33)Django操作cookieDjangoCookie
- 07 Django的Form模組DjangoORM
- django中出現 錯誤 Errno 10053Django
- Django基礎六之cookie和sessionDjangoCookieSession
- React setState和修改props觸發的鉤子React
- 使用 Dingo\API 中的 FormRequest 時,422 錯誤提示的 message 自定義,以及提示漢化。GoAPIORM
- DG使用中遇到的幾個錯誤
- Django Cookie與SessionDjangoCookieSession
- 自定義 serializers.ValidationError 的錯誤返回Error
- vue-router的鉤子Vue
- 12.1 使用鍵盤滑鼠監控鉤子
- Nuxt.js 應用中的 webpackConfigs 事件鉤子UXJSWeb事件
- Nuxt.js 應用中的 beforeResponse 事件鉤子UXJS事件
- Nuxt.js 應用中的 request 事件鉤子UXJS事件
- Nuxt.js 應用中的 close 事件鉤子UXJS事件
- Nuxt.js 應用中的 error 事件鉤子UXJSError事件
- 自定義OAM錯誤頁面
- antd表單的<a-form-item>使用自定義label插槽ORM
- django Form元件校驗流程DjangoORM元件
- 使用 antd 的 form 元件來自定義提交的資料格式ORM元件
- 【常見錯誤】--Nltk使用錯誤
- Tomcat 中的 Session 和 CookieTomcatSessionCookie
- cookie與session的區別以及在Django中的實現CookieSessionDjango
- Orbeon form 的安裝和使用教程ORBORM