form——驗證器Validators

form表單最大的作用就是驗證功能了,通過cleaned_data清洗,我們可以獲取傳來的值,通過參數、驗證器、自定義驗證方法,我們可以做到很多的驗證。

驗證器可用于在不同類型的字段之間重用驗證邏輯。validators有自帶的驗證器,也可以自己定義一個驗證器。在驗證某個字段的時候,可以傳遞一個validators參數用來指定驗證器,進一步對數據進行過濾。驗證器有很多,但是很多驗證器其實已經通過這個Field或者一些參數就可以指定了。比如EmailValidator,可以通過EmailField來指定,比如MaxValueValidator,可以通過max_value參數來指定。以下是一些常用的驗證器:

from django.core import validators
  1. MaxValueValidator:驗證最大值。
  2. MinValueValidator:驗證最小值。
  3. MinLengthValidator:驗證最小長度。
  4. MaxLengthValidator:驗證最大長度。
  5. EmailValidator:驗證是否是郵箱格式。
  6. URLValidator:驗證是否是URL格式。
  7. RegexValidator:如果還需要更加復雜的驗證,那么可以通過正則表達式的驗證器

其中最常用到的就是RegexValidator,他可以通過正則自己定義驗證器。如下面自己定義的一個驗證手機號的例子。自定義驗證器后,將驗證器加入到validators的列表中。

# 創建手機號的正則校驗器
mobile_validator = RegexValidator(r"^1[3-9]\d{9}$", "手機號碼格式不正確")
 mobile = forms.CharField(max_length=11, min_length=11, validators=[mobile_validator, ],error_messages={"min_length": "手機號長度有誤", "max_length": "手機號長度有誤","required": "手機號不能為空"})

自定義驗證

對于一些字段,可能還有一些更復雜的驗證,我們可以采用函數的形式,構造自定義驗證。一種是針對一個字段的驗證,函數名為clean_字段名(self),還有一種是針對多個字段一起驗證,函數名為clean(self),clean方法的第一步需要重新調用父類的clean方法。這兩種方式,如果驗證失敗,那么就拋出一個驗證錯誤ValidationError?。

# 驗證手機號if (not real_image_code) or (image_text != real_image_code):raise forms.ValidationError("圖片驗證失敗")
from django import formsclass ContactForm(forms.Form):# Everything as before....def clean_recipients(self):data = self.cleaned_data['recipients']if "fred@example.com" not in data:raise forms.ValidationError("You have forgotten about Fred!")# Always return a value to use as the new cleaned data, even if# this method didn't change it.return data
from django import formsclass RegisterTable(forms.Form):username = forms.CharField(min_length=1,max_length=10)phone = forms.CharField(validators=[validators.RegexValidator("1[345678]\d{9}", message="請輸入正確的手機號碼")])  # message會在表單類.errors.get_json_data()中獲得# 對某個字段進行自定義的驗證方式是,定義一個方法,這個方法的名字定義規則是:clean_fieldnamedef clean_phone(self):phone = self.cleaned_data.get("phone")  # 獲得字段數據ret = User.objects.filter(phone=phone).exists()  # 如果已存在if ret:raise forms.ValidationError(message="{}已經被注冊".format(phone))  # 拋出異常# message會在表單類.errors.get_json_data()中獲得else:return phone

下面是clean方法:

class RegisterTable(forms.Form):username = forms.CharField(min_length=1,max_length=10)phone = forms.CharField(validators=[validators.RegexValidator("1[345678]\d{9}", message="請輸入正確的手機號碼")])pwd = forms.CharField(min_length=5)  #密碼pwd_repeat = forms.CharField(min_length=5)  #重復的密碼def clean_phone(self):phone = self.cleaned_data.get("phone")  ret = User.objects.filter(phone=phone).exists()if ret:raise forms.ValidationError(message="{}已經被注冊".format(phone))return phonedef clean(self):  #最后審查ret = super(RegisterTable, self).clean()pwd = ret.get("pwd") # ==self.cleaned_data.get("pwd")pwd_repeat = ret.get("pwd_repeat")if pwd != pwd_repeat:raise forms.ValidationError(message="密碼不一致")else:return ret

?

轉載于:https://www.cnblogs.com/longwhite/p/10397647.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276080.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

若川知乎問答:做前端感覺很吃力怎么辦?

前些日,我發了一篇推文《做前端感到越來越吃力了!怎么辦?》,雖然是推廣,但閱讀量卻很高,推廣標題我們大概率不能改,感覺騙了大家,掉粉挺多人。寫稿的人可能就是看到了知乎這個問答。…

惠新宸php教程_惠新宸:首位國人加入PHP語言官方開發組

PHP開發組終于有了國人參與。最近, Laruence(真名惠新宸)加入了PHP語言官方開發組。 做PHP的同學一定很熟悉他了,他的博客風雪之隅(https://www.laruence.com/)發表了很多PHP源代碼分析和擴展開發相關的文章。他使用PHP擴展開發的PHP框架Yaf,…

d3 制作條形圖_停止制作常見的壞條形圖的5個簡單技巧

d3 制作條形圖Bar charts were probably the first type of chart you were ever introduced to in first grade. Their simplicity makes them a standard in visualizing data, but it is its accessibility that leads visualizers to often be careless with bar charts.乙…

SVN之使用原則

以下是我起草的部門SVN規范里原則的一部分。文件提交時要求必須提交注釋,注明相關修改信息,例如bug號、任務描述等。具體內容可采用約定或者設置的形式。你所提交的改變將體現給其他開發者,要明白提交的后果,提交之前要慎重。代碼…

圖解 React-router 源碼

大家好,我是若川。歡迎加我微信 ruochuan12今天分享一篇react-router源碼文章,深入理解路由的本質。微信預計閱讀只需8分鐘。點擊下方卡片關注我,或者查看源碼系列文章。閱讀源碼小 tips:從整體到細節,剛開始不要太拘泥…

青海西寧市大通縣非洲豬瘟疫區解除封鎖

中新網1月23日電 據農業農村部網站消息,農業農村部接到青海省農業農村廳報告,經評估驗收合格,青海省西寧市大通縣非洲豬瘟疫區解除封鎖。 大通縣非洲豬瘟疫情發生后,當地按照非洲豬瘟疫情應急預案和非洲豬瘟防治技術規范要求&…

回顧:中網飽經滄桑劫后余生 萬平國回首艱辛歷程

轉載鏈接:http://tech.sina.com.cn/i/c/75586.shtml 回顧:中網飽經滄桑劫后余生 萬平國回首艱辛歷程 http://www.sina.com.cn 2001年07月12日 13:25 財經時報   “最早的聊天室是我們做的、最早的檢索也是中網公司的、中網公司也是最早做電子商務的數…

android 輔助功能_輔助功能簡介

android 輔助功能Accessibility may be more than a moral imperative to ensure products are inclusive of more people who already experience barriers in daily life — it has a very practical outcome, benefiting everyone including the person with the disability…

【columnstore】mariadb columnstore 數據遷移

通過cpimport傳輸遷移: 官方文檔:https://mariadb.com/kb/en/lib...步驟: 1.導出庫中表的表結構,不要數據 # mysqldump -h 127.0.0.1 -uroot -p -P 4066 --skip-lock-tables test -d > test.sql 2.nc將文件傳輸至目標機器192.…

我有一個夢想

我有一個夢想,做一名大師傅,快樂地下廚房。土豆在我刀下歌唱,茄子在我鍋里跳舞。盤碗勺筷為我吶喊,油鹽醬醋為我喝彩。 我有一個夢想,讓土豆和茄子不再孤單,再加幾個青椒,做一盤地三鮮。還要少放…

推薦幾個前端大佬,真的厲害!

新的一年,推薦幾個還在堅持輸出的高質量前端公眾號,你想要的:React/Vue/Node/工程化/面試經驗等, 這里都有。不多說,直接看介紹。???? 程序員成長指北考拉,一個有趣且樂于分享的妹子,專注 N…

MySQL查詢結果導出到文件

轉載鏈接:http://eric-gcm.iteye.com/blog/1127734 選擇某些行作為需要的數據 SELECT id,dbname FROM index into outfile "d://aaa.txt"; 一般大家都會用 “SELECT INTO OUTFIL”將查詢結果導出到文件,但是這種方法不能覆蓋或者添加到已經創建…

RawCode-本身就是實驗性的8位類型

What if a type is created solely from the bit-representation of characters?如果僅根據字符的位表示形式創建類型怎么辦? This question was the basis of creating this experimental type. The type no longer uses familiar characters. ‘A’ looks like …

2d訪問沖突_Light | 基于環形分隔微鏡陣列的高速隨機訪問軸向聚焦系統

撰稿 | OSANJU 劉 揚01導讀近日,來自美國加州大學伯克利分校的Rikky Muller教授團隊,在國際頂尖學術期刊《Light: Science & Applications》發表了題為“A micromirror array with annular partitioning for high-speed random-access axial focus…

編譯出現ARM與THUMB沖突

問題: fatal error LNK1112: module machine type THUMB conflicts with target machine type ARM 解決方法: 在project-setting-linker-command line下,添加/machine:THUMB,如下: 轉載于:https://www.cnblogs.com/xfd…

阿里騰訊面試梳理個人成長經歷分享

大家好,我是若川。歡迎加我微信 ruochuan12,長期交流學習。今天分享一篇江西師范大學大四同學學習一年前端入職騰訊的經歷,關注很久的讀者朋友應該知道我也是畢業于江西不那么知名的高校。微信預計閱讀只需18分鐘。點擊下方卡片關注我&#x…

解決Ubuntu系統中文亂碼顯示問題

轉載鏈接:http://www.linuxidc.com/Linux/2014-02/96939.htm 一. Ubuntu默認的中文字符編碼 Ubuntu默認的中文字符編碼為zh_CN.UTF-8,這個可以在 /etc/environment中看到: sudo gedit /etc/environment 可以看到如下內容: PATH&qu…

unity 局部照亮_通過著名的藝術家照亮“光與空間運動”

unity 局部照亮Ever since minimalism momentously gained popularity in the 1960’s, the “Light and Space” movement has naturally acquired prominence for its stunning juxtaposition in geometric abstraction, luminescence, and space. Artwork from this distinc…

如何抓住重點,系統高效地學習數據結構與算法?

你是否曾跟我一樣,因為看不懂數據結構和算法,而一度懷疑是自己太笨?實際上,很多人在第一次接觸這門課時,都會有這種感覺,覺得數據結構和算法很抽象,晦澀難懂,宛如天書。正是這個原因…

Google Map瀏覽下載器

很久沒有更新博客了,最近為了玩Google Map,專門寫了個小工具。用以在瀏覽Google地圖時,將關心區域的圖片保存到本地。軟件主界面如下圖: 主界面提取子庫主要功能有: 1、可以瀏覽Google網站的三種圖:交通、地…