django12:form 組件/渲染標簽/數據校驗/鉤子函數/

基本用法

from django import forms# 自己寫一個類
class RegForm(forms.Form):username= forms.CharField(min_length=3,max_length=8, label="用戶名")password = forms.CharField(min_length=3,max_length=8,label="密碼")email=forms.EmailField()

?

1.校驗數據為字典形式。

2.is_valid():全部數據通過才true;

3. cleaned_data:查看符合校驗的數據

4.errors:查看不符合校驗的數據,以及不符合原因。

5.多傳字段直接忽略。

6.少傳錯誤,默認所有字段必須傳值。

?

渲染標簽

forms組件只幫你渲染獲取用戶輸入(輸入 選擇 下拉 文件)的標簽 不渲染按鈕和form表單標簽
渲染出來的每一個input提示信息都是類中字段首字母大寫

class MyRegForm(forms.Form):username = forms.CharField(max_length=8, min_length=3,label='用戶名')  # 最長8位,最短3位password = forms.CharField(max_length=8, min_length=3)  # 最長8位,最短3位email = forms.EmailField()  # 郵箱驗證def reg(request):# 1 先生成一個空的類對象form_obj = MyRegForm()if request.method == 'POST':# 3 獲取用戶數據并交給forms組件校驗  request.POSTform_obj = MyRegForm(request.POST)  #*****全部數據# 4 獲取校驗結果if form_obj.is_valid():return HttpResponse('數據沒問題')else:# 5 獲取校驗失敗的字段和提示信息print(form_obj.errors)# 2 直接將該對象傳給前端頁面return render(request, 'reg.html', locals())

第一種

<body>
<p>第一種渲染方式:多個p標簽  本地測試方便 封裝程度太高了 不便于擴展</p>
{{ form_obj.as_p }}
{#{{ form_obj.as_ul }}#}
{#{{ form_obj.as_table }}#}
</body>

第二種

<p>第二種渲染方式:  擴展性較高 書寫較為繁瑣</p>
<label for="{{ form_obj.username.id_for_label }}">{{ form_obj.username.label }}</label>
{{ form_obj.username }}
{{ form_obj.password.label }}{{ form_obj.password }}
{{ form_obj.email.label }}{{ form_obj.email }}

第三種

推薦使用,for循環方式。也可以用ajax

{{ form.errors.0 }} # 這個是模板語法

<p>第三種渲染方式  推薦使用</p>
<form action="" method="post" novalidate>{% for form in form_obj %}<p>{{ form.label }}{{ form }}<span>{{ form.errors.0 }}</span></p>{% endfor %}<input type="submit">
</form>

數據校驗

數據校驗一個前后端都得有 但是前端的校驗弱不禁風 可有可無
而后端的校驗則必須非常全面

form表單取消前端瀏覽器自動校驗功能 <form action="" method="post" novalidate>

notes:

1.必備條件,get請求和post傳給html頁面對象變量名必須一致。(form_obj)

2,當不合法的時候,也會保存上次數據,方便修改。

?

CharField用戶名類型校驗

from django.forms import widgets   //不導入也可以,沒提示class MyRegForm(forms.Form):# 用戶名最少3位最多8位username = forms.CharField(max_length=8,min_length=3,label='用戶名',error_messages={     //報錯信息的提示'max_length':"用戶名最長8位",'min_length':"用戶名最短3位",'required':"用戶名不能為空"},required=False,initial='jeff',  // 為空和默認值widget=forms.widgets.TextInput(attrs={'class':'form-control c1 c2'}),		//設置input的type屬性為text,及class屬性)email = forms.EmailField(label='郵箱',error_messages={'required':'郵箱必填','invalid':'郵箱格式不正確'})

?

鉤子函數


局部鉤子:操作單個字段的數據

全局鉤子:操作多個字段的數據

鉤子勾回來處理完之后,還要還回去的

?

局部鉤子

校驗用戶名中不能包含666

# 局部鉤子
# 這里的self是自己類,MyRegFormdef clean_username(self):username = self.cleaned_data.get('username')if '666' in username:self.add_error('username','光喊666是不行的')  	//添加報錯信息return username										//再把數據返回去

全局鉤子

前面驗證通過才走鉤子函數驗證。一層一層的驗證

兩次密碼驗證-----兩個字段

class MyRegForm(forms.Form):# 密碼password = forms.CharField(max_length=8,min_length=3,label='密碼',widget=forms.widgets.PasswordInput(attrs={'class':'form-control'}))# 密碼驗證re_password = forms.CharField(max_length=8,min_length=3,label='確認密碼',widget=forms.widgets.PasswordInput(attrs={'class':'form-control'}))def clean(self):# 這里的self是自己類,MyRegForm# 校驗密碼和確認密碼是否一致password = self.cleaned_data.get('password')re_password = self.cleaned_data.get('re_password')if not password == re_password:# 展示提示信息self.add_error('re_password','兩次密碼不一致')   // 添加報錯信息return self.cleaned_data

?

form組件其他參數及補充知識點

max_length			//允許輸入的最大長度
min_length			//最小長度label    		input的提示信息,name、password等error_messages   	自定義報錯的提示信息'max_length':"用戶名最長8位",'min_length':"用戶名最短3位",'required':"用戶名不能為空"required     	設置字段是否允許為空
initial            設置默認值widget             控制type類型及屬性   type   classs#多個屬性用空格widget=forms.widgets.TextInput(attrs={'class': 'form-control c1 c2'})widget=forms.widgets.PasswordInput()###正則校驗及報錯信息,并且支持多個validator  			phone = forms.CharField(validators=[RegexValidator(r'^[0-9]+$', '請輸入數字'),   RegexValidator(r'^159[0-9]+$', '數字必須以159開頭')])

?

其他字段屬性

性別校驗

    gender = forms.ChoiceField(choices=((1, "男"), (2, "女"), (3, "保密")),label="性別",initial=3,widget=forms.widgets.RadioSelect())

?

愛好單選 select校驗

    hobby = forms.ChoiceField(choices=((1, "籃球"), (2, "足球"), (3, "雙色球"),),label="愛好",initial=3,widget=forms.widgets.Select()   # 單選)

愛好多選select 校驗1

    hobby1 = forms.MultipleChoiceField(choices=((1, "籃球"), (2, "足球"), (3, "雙色球"),),label="愛好",initial=[1, 3],widget=forms.widgets.SelectMultiple())

愛好多選chekbox校驗2

    hobby2 = forms.MultipleChoiceField(choices=((1, "籃球"), (2, "足球"), (3, "雙色球"),),label="愛好",initial=[1, 3],widget=forms.widgets.CheckboxSelectMultiple())

是否記住密碼校驗

    keep = forms.ChoiceField(label="是否記住密碼",initial="checked",widget=forms.widgets.CheckboxInput())

?

?

?

詳細請參考:https://www.cnblogs.com/guyouyin123/p/12189453.html

?

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

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

相關文章

如何快速擁有一個 Web IDE

本文將介紹如何使用 2-3 句指令在幾分鐘內創建一個 Web IDE 環境。服務器準備如何準備服務器可以參考上文 一鍵體驗 Istio&#xff0c;這里只需要一臺即可&#xff0c;示例中的服務器 IP 為&#xff1a;43.154.189.116安裝 Web IDE下載安裝工具在服務器上&#xff0c;執行以下指…

有了防火墻、IPS、WAF 還需要數據庫審計?

本文講的是 有了防火墻、IPS、WAF 還需要數據庫審計&#xff1f;&#xff0c;“我們的網絡安全系統中已經有了Web應用防火墻、網絡防火墻和IPS&#xff0c;難道還需要數據庫審計嗎&#xff1f;”很多人有這樣的疑問&#xff0c;網絡中有層層防護&#xff0c;還不能保護數據庫的…

20155339 Exp4 惡意代碼分析

20155339 Exp4 惡意代碼分析 實驗后回答問題 &#xff08;1&#xff09;如果在工作中懷疑一臺主機上有惡意代碼&#xff0c;但只是猜想&#xff0c;所有想監控下系統一天天的到底在干些什么。請設計下你想監控的操作有哪些&#xff0c;用什么方法來監控。 監控網絡連接。當某個…

Linux就該這么學---第七章(LVM邏輯卷管理器)

第七章節-LVM技術邏輯卷管理器(LVM,Logical Volume Manager)1.物理卷(PV,physical Volumn)2.卷組(VG,Volume Group)3.邏輯卷(LV,Logical Volume)基本單元[PE,Physical Extent] 物理卷處于LVM中的最底層&#xff0c;可以將其理解為物理硬盤、硬盤分區或者RAID磁盤陣列卷組建立在…

django13:Session與Cookie操作

Session與Cookie cookie 服務端保存在客戶端瀏覽器上的信息都可以教cookie 表現形式一般是k:v鍵值對&#xff08;可以多個&#xff09; 優化&#xff1a; 隨機字符串1&#xff1a;用戶1相關信息 隨機字符串2&#xff1a;用戶2相關信息 session 數據是保存在服務端 表現形…

從Windows XP升級? 這是您需要了解的Windows 7

With Windows XP reaching the end of its long support life, many businesses and individuals are avoiding Windows 8 and upgrading to Windows 7 instead. If you’re a latecomer to Windows 7, here are the basics you need to know. 隨著Windows XP使用壽命的延長&am…

Java迭代器原理

1迭代器模式 迭代器是一種設計模式&#xff0c;這種模式用于順序訪問集合對象的元素&#xff0c;不需要知道集合對象的底層表示。 一般實現方式如下&#xff1a;&#xff08;來自&#xff09; public interface Iterator {public boolean hasNext();public Object next(); } pu…

企業版Java EE正式易主 甲骨文再次放手

有人說甲骨文收購的東西大多沒有了好下場&#xff0c;這么說雖然有些片面&#xff0c;但是最近一個月Java EE和Solaris的境遇難免讓人產生類似的聯想。 繼筆者上次報道《甲骨文將放棄Java EE 開源基金會雙手歡迎》之后&#xff0c;最新消息顯示&#xff0c;原本在甲骨文手中的J…

js中各種位置

js中各種位置 js中有各種與位置相關的屬性,每次看到的時候都各種懵逼。索性一次總結一下。 clientHeight 內容可視區域的高度。包括padding不包括border、水平滾動條、margin。對于inline的元素這個屬性一直是0&#xff0c;單位px&#xff0c;只讀元素。offsetHeight offsetHei…

如何判斷您是否擁有32位或64位版本的Google Chrome瀏覽器

Google Chrome is extremely popular with our readers, but did you know that they also have a 64-bit version of the browser these days? Here’s how to tell which version you are running, and how to switch if you aren’t. 谷歌瀏覽器在我們的讀者中非常受歡迎&a…

django14:CBV加入裝飾器

加在方法上面 from django.utils.decorators import method_decoratorclass HomeView(View):def dispatch(self, request, *args, **kwargs):return super(HomeView, self).dispatch(request, *args, **kwargs)def get(self, request):return render(request, "home.html&…

Kubernetes 跨集群流量調度實戰 :訪問控制

背景眾所周知&#xff0c;Flomesh 的服務網格產品 osm-edge[1] 是基于 SMI&#xff08;Service Mesh Interface&#xff0c;服務網格接口&#xff09; 標準的實現。SMI 定義了流量標識、訪問控制、遙測和管理的規范。在 上一篇 中&#xff0c;我們體驗過了多集群服務&#xff0…

python下sqlite增刪查改方法(轉)

sqlite讀寫 #codingutf-8 import sqlite3 import os #創建數據庫和游標 if os.path.exists( test.db):connsqlite3.connect( test.db)curconn.cursor() else:connsqlite3.connect( test.db)curconn.cursor()#創建表 cur.execute(CREATE TABLE IF NOT EXISTS customer (ID VARCH…

Apache HTTP Server 與 Tomcat 的三種連接方式介紹

本文轉載自IBM developer 首先我們先介紹一下為什么要讓 Apache 與 Tomcat 之間進行連接。事實上 Tomcat 本身已經提供了 HTTP 服務&#xff0c;該服務默認的端口是 8080&#xff0c;裝好 tomcat 后通過 8080 端口可以直接使用 Tomcat 所運行的應用程序&#xff0c;你也可以將該…

印象筆記和有道云筆記程序員_記錄,存儲和共享筆記的最佳應用程序和云服務...

印象筆記和有道云筆記程序員Is your desk and computer covered with sticky notes? Do you have miscellaneous pieces of paper with bits of information buried in drawers, your laptop case, backpack, purse, etc.? Get rid of all the chaos and get organized with …

java B2B2C 仿淘寶電子商城系統-Spring Cloud Eureka參數配置項詳解

Eureka涉及到的參數配置項數量眾多&#xff0c;它的很多功能都是通過參數配置來實現的&#xff0c;了解這些參數的含義有助于我們更好的應用Eureka的各種功能&#xff0c;下面對Eureka的配置項做具體介紹&#xff0c;供大家參考。 需要JAVA Spring Cloud大型企業分布式微服務云…

django15:中間件

中間件 開發django項目是&#xff0c;涉及全局相關功能&#xff0c;都可以使用中間件實現。 1.請求時&#xff0c;需要經過中間件&#xff0c;才能到達真正的django后端。 2.響應走的時候&#xff0c;也要經過中間件&#xff0c;才能出去。 依次經過里面的中間件進出&#x…

互聯網算法和產品優化的幾個反直覺現象

本文不涉及任何具體的業務和形態&#xff0c;沒有公開任何數據和需要保護的技術。互聯網產品和算法的優化&#xff0c;是廣大程序員和產品經理的主要工作。但想準確衡量線上實驗效果&#xff0c;從來都不簡單。筆者將這些反直覺現象&#xff0c;總結成三個典型案例予以討論。然…

SD 胡策 Round 1 T3 彩尾巴猹的二進制數

發現一個區間[L,R]代表的2進制數是3的倍數&#xff0c;當且僅當從L開始的后綴二進制值 - 從R1開始的后綴二進制值 是 3 的倍數 (具體證明因為太簡單而被屏蔽)。 于是我們就可以在每個點維護從它開始的后綴二進制數的值&#xff0c;因為在%3同余系下只有3個數&#xff0c;所以我…

求解10的75次方問題

對于求一個數的高次方&#xff0c;最簡單的方法&#xff0c;恐怕就是循環一定的次數&#xff0c;累乘。但是這樣的效率太低。下面我提供一個高效的算法。來自左程云《程序員代碼面試指南》。 就拿10的75次方舉例&#xff1a; 1.75的二進制數形式是1001011。 2.10的75次方10的64…