一篇文章帶你了解Django Form組件(入門篇)
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
前言
Hey,大家好呀,我是碼農(nóng),星期八。
本次咱們來(lái)get一個(gè)新技能,Form組件。
Form組件主要用于驗(yàn)證表單數(shù)據(jù)。
為什么需要Form組件
注:Form組件,只適用于,前后端未分離的項(xiàng)目中,主要用于驗(yàn)證表單數(shù)據(jù),所以,關(guān)鍵字是表單!!!
比如像嗶哩嗶哩的注冊(cè)界面。

我點(diǎn)擊注冊(cè),它不僅僅可以知道我的注冊(cè)昵稱是否存在,密碼是否小于6位,手機(jī)號(hào)格式錯(cuò)誤。
還會(huì)把錯(cuò)誤信息一直留在上面,給我提示。
我們就以這個(gè)為雛形,來(lái)簡(jiǎn)單的寫一個(gè)小小的注冊(cè)界面。
普通版注冊(cè)
代碼
urls.py
from django.urls import pathfrom web import viewsurlpatterns = [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ò)誤"if not error:print("寫入數(shù)據(jù)庫(kù)", nick, pwd, phone)return HttpResponse("注冊(cè)成功")else:return render(request, "reg.html", {"error": error})
templates/reg.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ò)誤信息顯示出來(lái)。
但是我原來(lái)填寫的東西沒(méi)了啊!!!,因?yàn)?/span>html form表單提交是刷新頁(yè)面提交的!
霧草,沒(méi)了,這是少的,如果有十幾個(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, HttpResponsefrom django.forms import Formfrom django.forms import fieldsfrom 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
<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ì)把原來(lái)的數(shù)據(jù)保存下來(lái),并且還有驗(yàn)證失敗的信息!
Form總結(jié)
從上述示例可以發(fā)現(xiàn)。
Django Form組件最起碼具有以下功能:
生成HTML標(biāo)簽。
驗(yàn)證提交的數(shù)據(jù)。
保留提交之前的數(shù)據(jù)。
沒(méi)錯(cuò),它的主要功能其實(shí)也就是這。
如果使用Django進(jìn)行開(kāi)發(fā),并且使沒(méi)有前后端分離的,必用Form組件!
如果在操作過(guò)程中有任何問(wèn)題,記得下面留言,我們看到會(huì)第一時(shí)間解決問(wèn)題。
每一份發(fā)奮努力的背后,必定有巨大的賞賜。
我是碼農(nóng)星期八,如果覺(jué)得還不錯(cuò),記得動(dòng)手點(diǎn)贊一下哈。
感謝你的觀看。
如果你覺(jué)得文章還可以,記得點(diǎn)贊留言支持我們哈。感謝你的閱讀,有問(wèn)題請(qǐng)記得在下方留言噢~
想學(xué)習(xí)更多關(guān)于Python的知識(shí),可以參考學(xué)習(xí)網(wǎng)址:http://pdcfighting.com/,點(diǎn)擊閱讀原文,可以直達(dá)噢~
-------------------?End?-------------------
往期精彩文章推薦:
手把手教你用Python制作簡(jiǎn)易小說(shuō)閱讀器
一篇文章總結(jié)一下Python庫(kù)中關(guān)于時(shí)間的常見(jiàn)操作
盤點(diǎn)5種基于Python生成的個(gè)性化語(yǔ)音方法

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說(shuō)一兩句吧~~
