解決兩個事情:不想重複提交,資料重置;
校驗規則
流程:
(1) 建立form元件對應的類,比如loginform
(2)
views.login:
if get請求:
form_obj=loginform()
return render(request,"login.html",) # 由form_obj渲染form表單的有效控制項
渲染方式三種:
123if post請求:
form_obj = loginfrom(request.post)
if form_obj.is_valid():
form_obj.cleaned_data # 所有的有效資料
label='使用者名稱',
max_length=16,
min_length=3,
error_messages=
)pwd = forms.charfield(
error_messages=,
widget=widgets.passwordinput(attrs={})
)repeat_pwd = forms.charfield(
error_messages=,
widget=widgets.passwordinput(attrs={})
)email = forms.emailfield()
phone = forms.charfield()
def clean_user(self):
val = self.cleaned_data.get('user') # 注意是cleaned_data
ret = userinfo.objects.filter(name=val)
if not ret:
return val # 通過,返回該值,不通過,返回錯誤資訊,validationerror()
else:
raise validationerror('該使用者已註冊')
def clean_phone(self):
val = self.cleaned_data.get('phone')
import re
ret = re.search("^1[3578]\d$", val)
if ret:
return val
else:
raise validationerror('手機號格式錯誤')
def clean(self): # clean是全域性鉤子
pwd = self.cleaned_data.get('pwd')
repeat_pwd = self.cleaned_data.get('repeat_pwd')
if pwd == repeat_pwd:
return self.cleaned_data
else:
raise validationerror('兩次密碼不一致')
def register(request):
if request.method == 'post':
reg_form = regform(request.post)
if reg_form.is_valid():
name = reg_form.cleaned_data.get('name')
pwd = reg_form.cleaned_data.get('pwd')
userinfo.objects.create(name=name, pwd=pwd)
return httpresponse('註冊成功!')
else:
all_err = reg_form.errors.get('__all__')
print(all_err)
return render(request, 'register.html', locals())
reg_form = regform()
return render(request, 'register.html', locals()) # 包含函式執行,到這locals的所有區域性變數。
templates
request.user 存的是當前使用者的物件,沒有登入的話是乙個匿名使用者物件。
1 使用auth_user表作為使用者表
2 登入:
user=auth.authenticate(username=user,password=pwd)
auth.login(request,user) # session寫操作
auth.logout(request) # request.session.flush()
驗證 user.is_authenticated() # 登入狀態時,返回true,否則返回false
建立使用者:user.objects.create_user(username="egon123",password="1234")
locals() 深拷貝 完全獨立,模板裡改變變數的值,函式裡的值不會改變。
ajax
1. 發請求的途徑
1. 在瀏覽器位址上輸入位址 回車 ——》 get
2. form表單 ——》 get / post
3. a標籤 ——》 get
2. ajax
使用js技術傳送非同步請求 一般傳輸json資料
特點:區域性重新整理 當前頁面不重新整理
非同步 1. 計算示例
$.ajax(,
success:function (res)
})2. ajax的引數介紹
上傳檔案
form_obj = new formdata();
# jquery物件轉換為dom物件,方法files,可能傳多個檔案,只要乙個,,這就包含了資料得form_data物件。
$.ajax(,
})2.
headers:,
3、 使用檔案
day21 學習總結
string s new string 建立乙個空的字串序列 string s new string hello 建立乙個內容為 hello 的字串 string s hello 建立乙個內容為 hello 的字串 string s new string char chars 通過字元陣列建立乙個字...
每日演算法 day 21
那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.3.4 記憶化搜尋 include include include include...
Day2 1 迴圈結構
課件位址 全部 課程目標 1.while 型迴圈 2.for.in 迴圈 3.range 函式4.break 和continue 語句及迴圈中的 else 子句計算機執行 流程 迴圈是讓計算機做重複任務的有效方法 while迴圈和break n 1 while n 100 if n 10 當n 11...