91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django Form組件相關知識有哪些

發布時間:2021-10-20 11:51:45 來源:億速云 閱讀:149 作者:iii 欄目:web開發

這篇文章主要介紹“Django Form組件相關知識有哪些”,在日常操作中,相信很多人在Django Form組件相關知識有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Django Form組件相關知識有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Form組件的理解

沒有使用Form組件時

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

代碼

... <form method="post" action="" novalidate>     <div>         <label>用戶名:</label>         <input type="text" name="uname">     </div>     <div>         <label>密碼:</label>         <input type="text" name="upwd">     </div>     <div><input type="submit"></div> </form> ...

實現效果

Django Form組件相關知識有哪些

使用Form組件時

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

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

Form類

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

views.py

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

html

... <form method="post" action="" novalidate>     <div>         <label>{{ form.uname.label }}:</label>         {{ form.uname }}         <!--              form.uname.errors.0 是為了展示填寫不正確的錯誤信息             errors.0是因為錯誤可能有多個             但是通常情況下,取第一個錯誤足夠          -->         {{ form.uname.errors.0 }}     </div>     <div>         <label>{{ form.upwd.label }}:</label>         {{ form.upwd }}         {{ form.upwd.errors.0 }}     </div>     <div><input type="submit"></div> </form> ...

小總結

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

Form類生成的Html

Django Form組件相關知識有哪些

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

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

Django Form組件相關知識有哪些

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

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

Form使用

使用有以下步驟。

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

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

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

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

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

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

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

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

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

方式一,點每個字段

<form method="post" action="" novalidate>     <div>         <!-- form.uname.label點的是label屬性  -->         <label>{{ form.uname.label }}:</label>         {{ form.uname }}         <!--             form.uname.errors.0 是為了展示填寫不正確的錯誤信息             errors.0是因為錯誤可能有多個             但是通常情況下,取第一個錯誤足夠          -->         {{ form.uname.errors.0 }}     </div>     <div>         <label>{{ form.upwd.label }}:</label>         {{ form.upwd }}         {{ form.upwd.errors.0 }}     </div>     <div><input type="submit"></div> </form>

方式二,循環form對象

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

<form method="post" action="" novalidate>     {% for foo in form %}         <div>             <label>{{ foo.label }}:</label>             {{ foo }}             {{ foo.errors.0 }}         </div>     {% endfor %}     <div><input type="submit"></div> </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,小數位長度

其他字段還有

BaseTemporalField(Field) DateField(BaseTemporalField) TimeField(BaseTemporalField) DateTimeField(BaseTemporalField) DurationField(Field) RegexField(CharField) EmailField(CharField) FileField(Field) ImageField(FileField) URLField(Field) BooleanField(Field) NullBooleanField(BooleanField)

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

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

多選字段

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

widget參數對應的插件

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

TextInput(Input) NumberInput(TextInput) EmailInput(TextInput) URLInput(TextInput) PasswordInput(TextInput) HiddenInput(TextInput) Textarea(Widget) DateInput(DateTimeBaseInput) DateTimeInput(DateTimeBaseInput) TimeInput(DateTimeBaseInput) CheckboxInput Select NullBooleanSelect SelectMultiple RadioSelect CheckboxSelectMultiple FileInput ClearableFileInput MultipleHiddenInput SplitDateTimeWidget SplitHiddenDateTimeWidget SelectDateWidget

widget示例

from django.forms import fields, widgets from django.forms import Form user = fields.CharField(     initial=2,     widget=widgets.RadioSelect(choices=((1,'一班'),(2,'二班'),)) ) # or user = fields.ChoiceField(     choices=((1,'一班'),(2,'二班'),),     initial=2,     widget=widgets.RadioSelect ) # 多選select,值為列表 user = fields.MultipleChoiceField(     choices=((1,'一班'),(2,'二班'),),     initial=[1,],     widget=widgets.SelectMultiple ) # 從數據庫中獲取多選 # 方式一 from django.forms import Form from django.core.validators import RegexValidator   class Form類(Form):       user = fields.ChoiceField(         # choices=((1,'一班'),(2,'二班'),),         initial=2,         widget=widgets.Select     )       def __init__(self, *args, **kwargs):         super(MyForm,self).__init__(*args, **kwargs)         # self.fields['user'].widget.choices = ((1,'一班'),(2,'二班'),)         # 或         self.fields['user'].widget.choices = models.Classes.objects.all().value_list('id','caption') # 方式二 from django.forms import models as form_model class Form類(Form):     depart = form_model.ModelMultipleChoiceField(queryset=models.Depart.objects.all())

到此,關于“Django Form組件相關知識有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桦南县| 惠东县| 大兴区| 威海市| 法库县| 玉树县| 福安市| 广东省| 阳江市| 榆林市| 乌兰浩特市| 樟树市| 锡林浩特市| 石城县| 正阳县| 淮滨县| 和平县| 虞城县| 盱眙县| 禹州市| 中牟县| 新密市| 原平市| 天水市| 平乡县| 元谋县| 许昌市| 酉阳| 甘洛县| 汝州市| 浮山县| 板桥市| 江北区| 安福县| 万山特区| 金门县| 金川县| 车致| 佳木斯市| 自治县| 尚志市|