溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Django中如何使用 Form組件

發(fā)布時(shí)間:2021-07-20 15:29:48 來源:億速云 閱讀:143 作者:Leah 欄目:web開發(fā)

Django中如何使用 Form組件,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

為什么需要Form組件

注:Form組件,只適用于,前后端未分離的項(xiàng)目中,主要用于驗(yàn)證表單數(shù)據(jù),所以,關(guān)鍵字是表單!!!

比如像嗶哩嗶哩的注冊(cè)界面。

Django中如何使用 Form組件

我點(diǎn)擊注冊(cè),它不僅僅可以知道我的注冊(cè)昵稱是否存在,密碼是否小于6位,手機(jī)號(hào)格式錯(cuò)誤

還會(huì)把錯(cuò)誤信息一直留在上面,給我提示。

我們就以這個(gè)為雛形,來簡(jiǎn)單的寫一個(gè)小小的注冊(cè)界面。

普通版注冊(cè)

代碼

urls.py

from django.urls import path from web import views  urlpatterns = [     path('reg/', views.reg,), ]

web/views.py

def reg(request):     if request.method == "GET":         return render(request, "reg.html")      nick = request.POST.get("nick")     pwd = request.POST.get("pwd")     phone = request.POST.get("phone")      error = {}     if len(pwd) < 6:         error["pwd"] = "密碼小于6位"     if len(phone) != 11:         error["phone"] = "手機(jī)號(hào)格式錯(cuò)誤"      # error為空表示未觸發(fā)異常     if not error:         print("寫入數(shù)據(jù)庫(kù)", nick, pwd, phone)         return HttpResponse("注冊(cè)成功")     else:         return render(request, "reg.html", {"error": error})

templates/reg.html

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>登錄</title> </head> <body> <div style="width: 40%;margin: auto">     <form action="" method="post">         <div><input name="nick" type="text" placeholder="昵稱"></div>         <div>             <input name="pwd" type="password" placeholder="密碼">             <span>{{ error.pwd }}</span>         </div>         <div>             <input name="phone" type="text" placeholder="手機(jī)號(hào)">             <span>{{ error.phone }}</span>         </div>         <div><input type="submit"></div>     </form> </div>  </body> </html>

實(shí)現(xiàn)效果

如果填寫的信息正常。

填寫信息

Django中如何使用 Form組件

跳轉(zhuǎn)之后

Django中如何使用 Form組件

如果填寫的信息錯(cuò)誤。

填寫信息

Django中如何使用 Form組件

錯(cuò)誤提示

Django中如何使用 Form組件

小總結(jié)

但是你發(fā)現(xiàn)雖然能把錯(cuò)誤信息顯示出來。

但是我原來填寫的東西沒了啊!!!,因?yàn)閔tml form表單提交是刷新頁(yè)面提交的!

霧草,沒了,這是少的,如果有十幾個(gè)???,那不就氣死了

好像我記得我上學(xué)時(shí),好多網(wǎng)站都是這。。。好像我也罵了很久,直到前后端分離時(shí),才好一點(diǎn)!

Form組件版注冊(cè)

再使用之前,需要將Django項(xiàng)目的settings.py的LANGUAGE_CODE設(shè)置為zh-hans

Django中如何使用 Form組件

代碼

以下代碼可能看不懂,大概理解就好!

urls.py

同上

web/views.py

from django.shortcuts import render, HttpResponse from django.forms import Form from django.forms import fields from django.forms import widgets   # Create your views here. class RegForm(Form):     name = fields.CharField(         widget=widgets.TextInput(attrs={"placeholder": "昵稱"})     )     pwd = fields.CharField(         min_length=6,         widget=widgets.TextInput(attrs={"placeholder": "密碼"})     )     phone = fields.CharField(         min_length=11,         max_length=11,         widget=widgets.TextInput(attrs={"placeholder": "手機(jī)號(hào)"})     )   def reg(request):     if request.method == "GET":         form = RegForm()         return render(request, "reg.html", {"form": form})     form = RegForm(request.POST, request.FILES)     # 驗(yàn)證表單數(shù)據(jù)     if form.is_valid():         result = form.clean()         print(result)         return HttpResponse("登錄")     return render(request, "reg.html", {"form": form})

templates/reg.html

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>登錄</title> </head> <body> <div style="width: 40%;margin: auto">     <form action="" method="post" novalidate>         {% for foo in form %}             <div>                 {{ foo }}                 <span style="color: red">{{ foo.errors.0 }}</span>             </div>         {% endfor %}         <div><input type="submit"></div>     </form> </div>  </body> </html>

實(shí)現(xiàn)效果

如果填寫的信息正常。

同上

如果填寫的信息錯(cuò)誤。


Django中如何使用 Form組件

小總結(jié)

這是我點(diǎn)擊提交之后報(bào)錯(cuò)的結(jié)果!

可以發(fā)現(xiàn),即使刷新頁(yè)面提交,還是會(huì)把原來的數(shù)據(jù)保存下來,并且還有驗(yàn)證失敗的信息!

Form總結(jié)

從上述示例可以發(fā)現(xiàn)。

Django Form組件最起碼具有以下功能:

  • 生成HTML標(biāo)簽。

  • 驗(yàn)證提交的數(shù)據(jù)。

  • 保留提交之前的數(shù)據(jù)。

關(guān)于Django中如何使用 Form組件問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI