您好,登錄后才能下訂單哦!
Django中如何使用 Form組件,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
為什么需要Form組件
注:Form組件,只適用于,前后端未分離的項(xiàng)目中,主要用于驗(yàn)證表單數(shù)據(jù),所以,關(guān)鍵字是表單!!!
比如像嗶哩嗶哩的注冊(cè)界面。
我點(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)效果
如果填寫的信息正常。
填寫信息
跳轉(zhuǎn)之后
如果填寫的信息錯(cuò)誤。
填寫信息
錯(cuò)誤提示
小總結(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
代碼
以下代碼可能看不懂,大概理解就好!
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ò)誤。
小總結(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í)。
免責(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)容。