<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一篇文章帶你了解Django Form組件(入門篇)

          共 3129字,需瀏覽 7分鐘

           ·

          2021-01-13 00:35

          擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書

          君不見(jiàn)吳中張翰稱達(dá)生,秋風(fēng)忽憶江東行。

          前言

          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 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

          <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.pyLANGUAGE_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?-------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          /今日留言主題/

          隨便說(shuō)一兩句吧~~

          瀏覽 84
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产免费无码视频 | 国产精品伦 | 亚欧精品久久久久久久久久久 | 亚洲AV高清无码 | 天天色天天干天天日天天做天天爱 |