日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django(part46)--form表单验证

發(fā)布時(shí)間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django(part46)--form表单验证 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)習(xí)筆記,僅供參考


文章目錄

    • form表單驗(yàn)證
      • 舉個(gè)例子



form表單驗(yàn)證


form提供表單和字段驗(yàn)證,我們可以使用form.is_valid() 方法進(jìn)行表單驗(yàn)證,若該方法返回值為True,則表示當(dāng)前表單合法,若返回值為False,則說明表單驗(yàn)證出現(xiàn)問題。

注意!這里,以及下面的form指的是forms.Form類的對(duì)象。


舉個(gè)例子


我們基于上一個(gè)Blog里的mywebsite_bookstore項(xiàng)目,舉一個(gè)例子來學(xué)習(xí)form表單驗(yàn)證。


如果我們沒有進(jìn)行表單驗(yàn)證操作,那么,當(dāng)我們進(jìn)行注冊(cè)時(shí),姓名可以填寫任意格式和任意長(zhǎng)度的數(shù)據(jù),這顯然不符合一般的填寫要求,且不方便我們處理:

為了使用戶規(guī)范的填寫注冊(cè)信息,我們需要進(jìn)行表單驗(yàn)證,即不按照規(guī)范進(jìn)行信息填寫,就注冊(cè)不成功

在userinfo應(yīng)用下的views.py模塊中,我們對(duì)視圖函數(shù)test_form進(jìn)行修改,增加一個(gè)表單驗(yàn)證功能:

def test_form(request):if request.method == "GET":myform = forms.RegForm()#創(chuàng)建對(duì)象return render(request, 'userinfo/test_form.html',locals())elif request.method == "POST":myform = forms.RegForm(request.POST)if myform.is_valid():#檢驗(yàn)表單中數(shù)據(jù)是否合法print(myform.cleaned_data)#輸出表單類中所有屬性值組成的字典return HttpResponse("<h2>表單提交成功!</h2> <br>" + str(myform.cleaned_data))else:return HttpResponse("<h2>表單數(shù)據(jù)驗(yàn)證失敗!</h2>")

注意!若想要myform.is_valid()方法返回True,則需要下面3個(gè)條件同時(shí)驗(yàn)證成功:

  • 對(duì)forms.xxxField()方法中的參數(shù)值進(jìn)行驗(yàn)證,驗(yàn)證成功返回None,驗(yàn)證失敗拋出forms.ValidationError異常
  • 對(duì)form.clean_屬性名(self)方法中的屬性進(jìn)行驗(yàn)證,驗(yàn)證成功返回屬性值,驗(yàn)證失敗拋出forms.ValidationError異常
  • 對(duì)form.clean(self)方法(表單的整體結(jié)構(gòu))進(jìn)行驗(yàn)證,驗(yàn)證成功返回 self.cleaned_data,驗(yàn)證失敗拋出forms.ValidationError異常

現(xiàn)在,我們編輯forms.py,添加兩個(gè)方法,進(jìn)行驗(yàn)證:

# -*- coding: utf-8 -*- from django import formsclass RegForm(forms.Form):username = forms.CharField(label = "輸入昵稱")password = forms.CharField(label = "輸入密碼",widget=forms.PasswordInput)passwordRepeat = forms.CharField(label = "再次輸入密碼",widget=forms.PasswordInput)tele = forms.CharField(label = "手機(jī)號(hào)", required = False)email = forms.CharField(label = "郵箱", required = False,widget=forms.EmailInput)#<input type="text">def clean_username(self):#對(duì)單個(gè)屬性進(jìn)行檢驗(yàn)username = self.cleaned_data["username"]if (len(username) < 6) | (len(username) > 12):raise forms.ValidationError("用戶名必須在6~12個(gè)字符之間!")return usernamedef clean(self):#屬性之間進(jìn)行檢驗(yàn)(整體檢驗(yàn))pwd1 = self.cleaned_data["password"]pwd2 = self.cleaned_data["passwordRepeat"]if pwd1 != pwd2:raise forms.ValidationError("兩次輸入不一致!")return self.cleaned_data

注意,views.py模塊中test_form視圖方法里的is_valid()方法會(huì)自動(dòng)調(diào)用clean_username函數(shù)和clean函數(shù)。


我們向http://127.0.0.1:8000/userinfo/test_form/發(fā)起請(qǐng)求,并填寫符合要求的注冊(cè)信息:

點(diǎn)擊注冊(cè),顯示表單提交成功:

當(dāng)我們填寫的用戶名大于12個(gè)字符時(shí),再點(diǎn)擊注冊(cè),Django就會(huì)提示我們驗(yàn)證失敗:


總結(jié)

以上是生活随笔為你收集整理的Django(part46)--form表单验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。