精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇文章淺析Django Form組件相關知識

開發 前端
本篇先從入門角度說如何使用簡單使用Django Form組件,使用Form組件和沒使用Form組件的區別。

[[375799]]

前言

在上一篇時,我們小試牛刀了以下Django Form組件的使用,一篇文章帶你了解Django Form組件(入門篇),沒來得及的小伙伴可以一起看看。但是你可能會有很多疑問,并不知道怎么使用。

并且知道Form組件的功能。

  • 生成HTML標簽。
  • 驗證提交的數據。
  • 保留提交之前的數據。

所以本篇就接著上次的繼續,來一起學習以下Django Form組件如何使用。

Form組件的理解

沒有使用Form組件時

在一般情況下,我們如果編寫輸入框時,在Html中,一般都是這樣寫的。

代碼

  1. ... 
  2. <form method="post" action="" novalidate> 
  3.     <div> 
  4.         <label>用戶名:</label> 
  5.         <input type="text" name="uname"
  6.     </div> 
  7.     <div> 
  8.         <label>密碼:</label> 
  9.         <input type="text" name="upwd"
  10.     </div> 
  11.     <div><input type="submit"></div> 
  12. </form> 
  13. ... 

 實現效果


使用Form組件時

在使用Form組件時,我們通常需要定義Form類。

這個Form,里面的字段,就可以理解為input標簽,只不過是在后端寫的。

Form類

  1. from django.forms import Form 
  2. class LoginForm(Form): 
  3.     uname = fields.CharField(label="用戶名"
  4.     upwd = fields.CharField(label="密碼"

views.py

  1. from django.shortcuts import render 
  2. def login(request): 
  3.     form = LoginForm() 
  4.     return render(request, "login_f.html", {"form": form}) 

html

  1. ... 
  2. <form method="post" action="" novalidate> 
  3.     <div> 
  4.         <label>{{ form.uname.label }}:</label> 
  5.         {{ form.uname }} 
  6.         <!--  
  7.             form.uname.errors.0 是為了展示填寫不正確的錯誤信息 
  8.             errors.0是因為錯誤可能有多個 
  9.             但是通常情況下,取第一個錯誤足夠 
  10.          --> 
  11.         {{ form.uname.errors.0 }} 
  12.     </div> 
  13.     <div> 
  14.         <label>{{ form.upwd.label }}:</label> 
  15.         {{ form.upwd }} 
  16.         {{ form.upwd.errors.0 }} 
  17.     </div> 
  18.     <div><input type="submit"></div> 
  19. </form> 
  20. ... 

 小總結

可以發現,我并沒有寫input代碼,而是直接調用后端的form.<字段名>出來的。

Form類生成的Html


可以發現,基本上和自己寫的Html差不多,生成的id為id+<字段名>。

Form生成的Html和手動寫Html對應圖


通過對應圖確定,通過后端的form.<字段>生成的直接就是input標簽。

好了,到這,就確定了Form類,就是為我們生成input標簽的。

Form使用

使用有以下步驟。

1.創建Form類,盡可能和models對上。

  1. class LoginForm(Form): 
  2.     uname = fields.CharField(label="用戶名"
  3.     upwd = fields.CharField(label="密碼"

因為Form提交的數據,可以轉換成dict,key就是Form字段名。

如果Form字段和models對上,直接models.<模型類>.objects.create(**dict)。

2.如果是GET請求,實例化Form對象,并且返回頁面。

  1. def login(request): 
  2.     if request.method == 'GET'
  3.         form = LoginForm() 
  4.         return render(request, "login_f.html", {"form": form}) 

3.如果是POST請求,實例化Form對象時,傳入request.POST,request.FILES,并且驗證。

  1. # 接著上面 
  2.     elif request.method == "POST"
  3.         form = LoginForm(request.POST, request.FILES) 
  4.         ########### 驗證數據 
  5.         if form.is_valid(): 
  6.             # 驗證成功 
  7.             # 驗證成功之后的數據,key就是Form類的字段名 
  8.             print(form.cleaned_data)  # {'uname''1212''upwd''1212'
  9.             return HttpResponse("ok"
  10.         # 驗證失敗 
  11.         # 雖然返回的還是頁面 
  12.         # 但是form會把上次輸入框內容保存下來,并且還會展示errors信息 
  13.         return render(request, "login_f.html", {"form": form}) 

4.前端使用后端傳過來的form對象。

方式一,點每個字段

  1. <form method="post" action="" novalidate> 
  2.     <div> 
  3.         <!-- form.uname.label點的是label屬性  --> 
  4.         <label>{{ form.uname.label }}:</label> 
  5.         {{ form.uname }} 
  6.         <!-- 
  7.             form.uname.errors.0 是為了展示填寫不正確的錯誤信息 
  8.             errors.0是因為錯誤可能有多個 
  9.             但是通常情況下,取第一個錯誤足夠 
  10.          --> 
  11.         {{ form.uname.errors.0 }} 
  12.     </div> 
  13.     <div> 
  14.         <label>{{ form.upwd.label }}:</label> 
  15.         {{ form.upwd }} 
  16.         {{ form.upwd.errors.0 }} 
  17.     </div> 
  18.     <div><input type="submit"></div> 
  19. </form> 

 方式二,循環form對象

form對象是可以循環的,循環的每個form對象就是每個字段對象。

  1. <form method="post" action="" novalidate> 
  2.     {% for foo in form %} 
  3.         <div> 
  4.             <label>{{ foo.label }}:</label> 
  5.             {{ foo }} 
  6.             {{ foo.errors.0 }} 
  7.         </div> 
  8.     {% endfor %} 
  9.     <div><input type="submit"></div> 
  10. </form> 
 所以,如果一個表有很多的字段時,盡可能的采用循環方式。

Form字段

Form組件主要是幫助我們做驗證的,所以,當然有很多參數比如:

  • 否可以為空。
  • label展示的內容。
  • 等...

常用字段

Field類為所有字段的基類

Field參數如下

  • required=True,是否允許為空,默認True,不能為空
  • widget=None,插件,展示的input具體信息
  • label=None,label,標簽展示的內容
  • help_text="",幫助信息(在標簽旁邊顯示)
  • error_massages=None,錯誤信息{"required":"不能為空",...}
  • show_hidden_initial=False,是否在當前插件后再加一個隱藏且具有默認值的插件(可用于驗證兩次輸入是否一致)
  • validators=[],自定義驗證規則函數
  • localize=False,是否支持本地化
  • disabled=False,是否可以編輯
  • label_suffix=None,Label內容后綴

CharField(Field),比較常用的字段之一

  • min_length=None,最小長度
  • max_length=None,最大長度
  • strip=True,是否移除輸入空白

IntegerField(Field)

  • max_value=None,最大值
  • min_value=None,最小值

DecimalField(IntegerField)

  • max_value=None,最大值
  • min_value=None,最小值
  • max_digits=None,最大長度
  • decimal_places=None,小數位長度

其他字段還有

  1. BaseTemporalField(Field) 
  2. DateField(BaseTemporalField) 
  3. TimeField(BaseTemporalField) 
  4. DateTimeField(BaseTemporalField) 
  5. DurationField(Field) 
  6. RegexField(CharField) 
  7. EmailField(CharField) 
  8. FileField(Field) 
  9. ImageField(FileField) 
  10. URLField(Field) 
  11. BooleanField(Field) 
  12. NullBooleanField(BooleanField) 

...還有很多字段,這里就不一一贅述了,具體詳見官網:

https://docs.djangoproject.com/zh-hans/2.0/ref/forms/api/#django.forms.BoundField

多選字段

  1. ChoiceField(Field) 
  2. ... 
  3.     choices=() # 選項,如:choices = ((1,'一班'),(2,'二班'),) 
  4.     required=True # 是否必填 
  5.     widget=None # 插件,默認select插件 
  6.     label=None # Label內容 
  7.     initial=None # 初始值 
  8.     help_text='' # 幫助提示 
  9.  
  10. from django.forms.models import ModelChoiceField 
  11. # 單選 
  12. ModelChoiceField(ChoiceField) 
  13.     queryset=None # 查詢數據庫中的數據 
  14.     empty_label="---------" # 默認空顯示內容 
  15.     to_field_name=None # HTML中value的值對應的字段 
  16.     limit_choices_to=None # ModelForm中對queryset二次篩選 
  17. # 多選 
  18. from django.forms.models import ModelMultipleChoiceField 
  19. ModelMultipleChoiceField(ModelChoiceField) 
  20. ... 

widget參數對應的插件

即使字段是CharField,但是最終效果以插件為主!

  1. TextInput(Input) 
  2. NumberInput(TextInput) 
  3. EmailInput(TextInput) 
  4. URLInput(TextInput) 
  5. PasswordInput(TextInput) 
  6. HiddenInput(TextInput) 
  7. Textarea(Widget) 
  8. DateInput(DateTimeBaseInput) 
  9. DateTimeInput(DateTimeBaseInput) 
  10. TimeInput(DateTimeBaseInput) 
  11. CheckboxInput 
  12. Select 
  13. NullBooleanSelect 
  14. SelectMultiple 
  15. RadioSelect 
  16. CheckboxSelectMultiple 
  17. FileInput 
  18. ClearableFileInput 
  19. MultipleHiddenInput 
  20. SplitDateTimeWidget 
  21. SplitHiddenDateTimeWidget 
  22. SelectDateWidget 

widget示例

  1. from django.forms import fields, widgets 
  2. from django.forms import Form 
  3. user = fields.CharField( 
  4.     initial=2, 
  5.     widget=widgets.RadioSelect(choices=((1,'一班'),(2,'二班'),)) 
  6. or 
  7. user = fields.ChoiceField( 
  8.     choices=((1,'一班'),(2,'二班'),), 
  9.     initial=2, 
  10.     widget=widgets.RadioSelect 
  11. # 多選select,值為列表 
  12. user = fields.MultipleChoiceField( 
  13.     choices=((1,'一班'),(2,'二班'),), 
  14.     initial=[1,], 
  15.     widget=widgets.SelectMultiple 
  16. # 從數據庫中獲取多選 
  17. # 方式一 
  18. from django.forms import Form 
  19. from django.core.validators import RegexValidator 
  20.   
  21. class Form類(Form): 
  22.   
  23.     user = fields.ChoiceField( 
  24.         # choices=((1,'一班'),(2,'二班'),), 
  25.         initial=2, 
  26.         widget=widgets.Select 
  27.     ) 
  28.   
  29.     def __init__(self, *args, **kwargs): 
  30.         super(MyForm,self).__init__(*args, **kwargs) 
  31.         # self.fields['user'].widget.choices = ((1,'一班'),(2,'二班'),) 
  32.         # 或 
  33.         self.fields['user'].widget.choices = models.Classes.objects.all().value_list('id','caption'
  34. # 方式二 
  35. from django.forms import models as form_model 
  36. class Form類(Form): 
  37.     depart = form_model.ModelMultipleChoiceField(queryset=models.Depart.objects.all()) 

總結

本篇先從入門角度說如何使用簡單使用Django Form組件,使用Form組件和沒使用Form組件的區別。

然后講了以下Form如何使用。

  • 首先GET請求時,返回頁面。
  • POST請求時,驗證數據,判斷是否符合規則。
  • 如果失敗返回錯誤信息,如果成功繼續,寫入數據庫。

最后列舉出常用的Form字段,還有如何使用多選字段。

 

責任編輯:姜華 來源: Python爬蟲與數據挖掘
相關推薦

2021-01-12 09:04:12

Django FormForm組件開發

2021-05-20 09:02:59

CSS單位長度

2020-12-29 09:05:48

基礎DjangoORM

2021-01-05 09:07:30

Django ORMF查詢Q查詢

2021-04-07 06:11:37

Css前端CSS定位知識

2021-07-13 11:37:47

cpu架構Linux

2021-01-07 11:10:47

關鍵字

2021-01-01 09:20:20

操作DjangoORM

2020-10-09 08:15:11

JsBridge

2021-03-21 07:36:43

Python迭代知識語言

2021-04-09 08:40:51

網絡保險網絡安全網絡風險

2022-02-21 09:44:45

Git開源分布式

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2024-06-25 08:18:55

2019-04-17 15:16:00

Sparkshuffle算法

2017-09-05 08:52:37

Git程序員命令

2019-05-21 14:52:57

2024-12-26 16:49:20

Python字典元素

2021-06-30 10:01:09

Python字典代碼
點贊
收藏

51CTO技術棧公眾號

无码熟妇人妻av| 成人免费在线网| 亚洲专区第一页| 最新欧美人z0oozo0| 精品国产三级电影在线观看| 99视频在线免费播放| a天堂中文在线88| 国产最新精品免费| 538国产精品一区二区免费视频| 最近中文字幕在线mv视频在线 | 污片在线免费看| 成人直播在线| 久久久精品蜜桃| 国产精品v欧美精品v日韩| 日韩美一区二区| 欧美精品偷拍| 中文字幕欧美视频在线| 中文字幕三级电影| 日韩一区二区三区四区五区| 亚洲国产wwwccc36天堂| 亚洲日本精品国产第一区| 人妻无码中文字幕免费视频蜜桃| 日本欧美一区二区| 久久久久久午夜| 亚洲一级黄色录像| 综合综合综合综合综合网| 欧美一区二区三区在线看| 成人久久久久久久久| 性欧美ⅴideo另类hd| 欧美国产禁国产网站cc| 国产自产精品| 国产成人免费看一级大黄| 日韩电影免费一区| 欧美最猛性xxxxx免费| 久久久精品人妻一区二区三区四| 久久免费大视频| 亚洲性生活视频在线观看| 欧美双性人妖o0| 综合激情久久| 69堂精品视频| 老司机久久精品| www.国产精品| 欧美性猛片xxxx免费看久爱| 黄色动漫在线免费看| 白白色在线观看| 一区二区三区免费网站| 一区二区三区四区免费观看| 在线a人片免费观看视频| 国产午夜精品久久久久久久| 免费在线观看91| 天堂成人在线| 久久久久久免费毛片精品| 精品视频在线观看| 日本又骚又刺激的视频在线观看| av一区二区三区四区| 国产伦精品一区二区三毛| 午夜精品久久久久久久99| 国产高清不卡二三区| 亚洲aa在线观看| 国产毛片毛片毛片毛片| 国产麻豆精品久久一二三| 69堂成人精品视频免费| 亚洲av永久无码国产精品久久 | 国产日韩欧美影视| 中文字幕在线网站| 激情综合网天天干| 亚洲自拍偷拍福利| 亚洲成人黄色片| 91在线精品一区二区三区| 精品一区二区三区国产| 久久精品蜜桃| 国产精品毛片大码女人| 免费观看中文字幕| 激情图片在线观看高清国产| 午夜久久久久久| 成人在线看视频| 黄色精品视频网站| 欧美mv日韩mv国产网站app| www.四虎在线| 国产伦一区二区三区| 日韩视频在线观看免费| 精品视频在线观看免费| 免费亚洲视频| 91理论片午午论夜理片久久| 好吊视频一二三区| 国产亚洲精品aa午夜观看| 中文字幕日韩精品久久| 阿v视频在线观看| 日本韩国一区二区| theporn国产精品| 日韩美女国产精品| 这里只有精品在线播放| 免费又黄又爽又色的视频| 日韩午夜激情| 91久久久亚洲精品| 日本私人网站在线观看| 最新国产の精品合集bt伙计| 欧美午夜小视频| 国产91欧美| 亚洲国产成人av在线| 少妇高潮惨叫久久久久| 亚洲日本黄色| 91精品久久久久久久久| 三区在线观看| 亚洲美女淫视频| 18岁视频在线观看| 91精品导航| www.久久久久| 台湾佬中文在线| 国产精品99久久久久久有的能看| 欧美精品二区三区四区免费看视频| 麻豆网站在线| 91成人在线精品| 国产亚洲精品成人a| 日韩av免费大片| 欧美在线免费观看| www.av在线.com| 中文字幕电影一区| 欧美成人免费高清视频| 97久久超碰| 久久精品99无色码中文字幕| 亚洲成人av影片| 成人丝袜高跟foot| 今天免费高清在线观看国语| 欧美成人精品三级网站| 精品夜色国产国偷在线| 久久久久久久久久久久久久免费看| 免费一区二区视频| 欧美一区二区三区在线播放| 咪咪网在线视频| 欧美xxxx在线观看| 欧美精品一区二区成人| 国产一本一道久久香蕉| 天堂社区 天堂综合网 天堂资源最新版| 国产在线美女| 亚洲成人网av| www.99re7.com| 国产91在线观看| 秋霞在线一区二区| 国产成人精品一区二区三区在线 | 亚洲高清激情| 成人三级在线| 欧美四级在线| 欧美电视剧在线看免费| 欧美成人一二三区| 国产成人免费视频一区| 又大又硬又爽免费视频| 91成人在线精品视频| 欧美激情2020午夜免费观看| 超碰福利在线观看| 一区二区三区中文在线观看| 欧美激情第四页| 综合av在线| 国产精品av一区| 国产伦理精品| 精品视频www| 久久久免费高清视频| 久久亚洲精精品中文字幕早川悠里| 精品少妇一区二区三区在线| 台湾亚洲精品一区二区tv| 欧美中文字幕在线观看| 免费人成黄页在线观看忧物| 欧美在线色视频| 青青草华人在线视频| 国内外成人在线| 人人妻人人澡人人爽欧美一区| 综合激情网...| 欧美专区在线视频| 福利视频在线播放| 7777精品伊人久久久大香线蕉完整版 | 91国在线高清视频| 久久综合社区| 国产精品扒开腿做爽爽爽男男| aⅴ在线视频男人的天堂| 91精品中文字幕一区二区三区| 国产精品老熟女一区二区| 不卡av在线网| 噼里啪啦国语在线观看免费版高清版| 日本久久精品| 99久久伊人精品影院| 日本不良网站在线观看| 在线观看国产欧美| 国产视频一区二区三区四区五区| 五月综合激情网| 天堂在线中文视频| 高清不卡在线观看av| 激情综合在线观看| 五月开心六月丁香综合色啪| 国产一区喷水| 亚洲成人1区| 97视频在线看| 看女生喷水的网站在线观看| 亚洲福利影片在线| 中文字幕乱码一区二区| 亚洲色图.com| 中文字幕 日本| 六月婷婷色综合| 亚洲国产精品无码av| 日本不卡高清| 久久综合一区二区三区| 99久久99九九99九九九| 欧美激情视频一区二区| 国产youjizz在线| 亚洲精品一区二区在线观看| 中文字幕av片| 精品高清美女精品国产区| 91麻豆精品久久毛片一级| 99riav一区二区三区| 三级黄色片免费看| 欧美综合国产| 免费看欧美一级片| 国产精品videosex性欧美| 麻豆精品蜜桃一区二区三区| 亚洲专区**| 成人黄色短视频在线观看| 日韩久久一区二区三区| 欧美精品激情视频| 黄色免费网站在线观看| 一区二区中文字幕| 欧美捆绑视频| 日韩激情av在线播放| 国产黄色一级大片| 欧美肥胖老妇做爰| 中文字幕乱码无码人妻系列蜜桃| 欧美日韩免费区域视频在线观看| 蜜臀av午夜精品久久| 国产精品毛片大码女人| 日韩中文字幕有码| 91免费国产在线观看| 91传媒理伦片在线观看| 国产麻豆成人精品| 超碰91在线播放| 韩国三级电影一区二区| 国产一二三区av| 三级久久三级久久久| 国产主播在线看| 国产精品婷婷| 怡红院av亚洲一区二区三区h| 亚洲小说区图片区| 337p亚洲精品色噜噜狠狠p| 亚洲精品小说| 三级在线免费观看| 亚洲国产精品91| 久久最新免费视频| 亚洲综合中文| 波多野结衣av一区二区全免费观看| 亚洲精品在线观看91| 国产成年人在线观看| 一本一道久久综合狠狠老| 大地资源第二页在线观看高清版| 欧美激情另类| 中国一级大黄大黄大色毛片| 女同性一区二区三区人了人一| 日日噜噜夜夜狠狠久久丁香五月| 亚洲香蕉av| 亚洲精品久久久久久久蜜桃臀| 欧美日韩综合| 18禁网站免费无遮挡无码中文| 亚洲视频综合| 97在线免费公开视频| 日本成人在线一区| 国产欧美一区二| 国产精品主播直播| 成人午夜精品无码区| ww久久中文字幕| аⅴ天堂中文在线网| 成人欧美一区二区三区白人| 欧美色图一区二区| 偷拍亚洲欧洲综合| 中文人妻熟女乱又乱精品| 91麻豆精品国产91久久久资源速度 | 国产精品久久久一区二区| 国内外成人免费激情视频| 日本亚洲视频在线| 国产成人精品综合久久久久99 | 精品无码在线视频| 中文字幕av一区二区三区| 亚洲国产123| 亚洲国产美国国产综合一区二区| 精品欧美一区二区三区免费观看 | 久久久久久久久久久av| 中文字幕一区久| 国产女同一区二区| 国内精品麻豆美女在线播放视频| 欧美日韩综合久久| 在线成人直播| 久久久久人妻精品一区三寸| 久久国产精品色| 亚洲男女在线观看| 国产精品麻豆99久久久久久| 久久久久久久久97| 欧美在线观看视频在线| 亚洲精品国产一区二| 亚洲一区二区福利| 超碰在线资源| 国产日韩精品综合网站| 久久久久久毛片免费看 | 尹人成人综合网| 校园春色 亚洲色图| 大尺度一区二区| 天天操天天干天天操天天干| 亚洲一区二区美女| 一本大道伊人av久久综合| 亚洲精品在线一区二区| 黄色免费在线观看| 日产精品久久久一区二区福利| 精品国产第一国产综合精品| 欧美不卡福利| 黄色精品免费| 色91精品久久久久久久久| 久久精品人人做人人爽人人| 久久国产精品二区| 欧美日韩国产片| 免费在线高清av| 久久免费视频网站| 久久av网站| 日本在线视频一区| 国产精品久久久一区二区| 国产乱淫av麻豆国产免费| 中文字幕在线播放不卡一区| 国语对白永久免费| 精品剧情v国产在线观看在线| 麻豆传媒在线免费看| 国产精品国内视频| 欧美人妖在线| 成人免费观看毛片| www.久久久久久久久| 国产在线观看免费av| 日韩欧美激情一区| www国产在线观看| 成人精品aaaa网站| 欧美freesextv| 亚洲欧美日韩一级| 国产精品私人自拍| 中文在线免费看视频| 中文字幕视频在线免费欧美日韩综合在线看 | 91人人澡人人爽人人精品| 久久―日本道色综合久久| 成人在线免费看视频| 亚洲免费精彩视频| 高清av不卡| 精品一区二区久久久久久久网站| 亚洲久久一区二区| 加勒比精品视频| 精品国产91久久久久久老师| 人成网站在线观看| 91成人天堂久久成人| 婷婷亚洲精品| 日韩中文字幕免费在线| 欧美国产日韩a欧美在线观看| 国产99免费视频| 中文字幕久热精品在线视频| 成人在线视频免费看| 中国成人亚色综合网站| 黄一区二区三区| 老妇女50岁三级| 欧美videos大乳护士334| 成人影院在线视频| 久久精品综合一区| 日本午夜一本久久久综合| 女同久久另类69精品国产| 宅男噜噜噜66一区二区66| 色在线视频网| 久久精品第九区免费观看| 久久精品导航| 亚洲天堂av中文字幕| 欧美一区二区三区视频在线 | 国产剧情在线观看一区| 日韩大片一区二区| 一区二区三区精品| 亚州av在线播放| 国产成人avxxxxx在线看| 久久一本综合| 欧美一级大片免费看| 第一福利永久视频精品| 香蕉视频免费在线播放| 5g影院天天爽成人免费下载| 国产欧美91| 综合 欧美 亚洲日本| 日韩女优电影在线观看| 成人性生交大片免费观看网站| 视频一区三区| 国产不卡在线一区| 综合网在线观看| 欧美成人免费在线观看| 日韩成人一级| 天天操狠狠操夜夜操| 亚洲777理论| 91精彩在线视频| 国模一区二区三区私拍视频| 日本女人一区二区三区| 亚洲国产精品久| 在线观看欧美日韩| 波多野结衣欧美| 手机视频在线观看| 欧美日韩日本国产| 求av网址在线观看| 欧美日本韩国在线| 国产麻豆精品theporn| 国内av在线播放|