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

2021-01-12 51CTO

 

前言

Hey,大家好呀,我是碼農,星期八。

本次咱們來get一個新技能,Form組件。

Form組件主要用於驗證表單數據。

為什麼需要Form組件

注:Form組件,只適用於,前後端未分離的項目中,主要用於驗證表單數據,所以,關鍵字是表單!!!

比如像嗶哩嗶哩的註冊界面。


我點擊註冊,它不僅僅可以知道我的註冊暱稱是否存在,密碼是否小於6位,手機號格式錯誤

還會把錯誤信息一直留在上面,給我提示。

我們就以這個為雛形,來簡單的寫一個小小的註冊界面。

普通版註冊

代碼

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"] = "手機號格式錯誤"      # error為空表示未觸發異常     if not error:         print("寫入資料庫", nick, pwd, phone)         return HttpResponse("註冊成功")     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="手機號">             <span>{{ error.phone }}</span>         </div>         <div><input type="submit"></div>     </form> </div>  </body> </html> 

實現效果

如果填寫的信息正常。

填寫信息

跳轉之後


如果填寫的信息錯誤。

填寫信息


錯誤提示


小總結

但是你發現雖然能把錯誤信息顯示出來。

但是我原來填寫的東西沒了啊!!!,因為html form表單提交是刷新頁面提交的!

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

好像我記得我上學時,好多網站都是這。。。好像我也罵了很久,直到前後端分離時,才好一點!

Form組件版註冊

再使用之前,需要將Django項目的settings.py的LANGUAGE_CODE設置為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": "手機號"})     )   def reg(request):     if request.method == "GET":         form = RegForm()         return render(request, "reg.html", {"form": form})     form = RegForm(request.POST, request.FILES)     # 驗證表單數據     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> 

實現效果

如果填寫的信息正常。

同上

如果填寫的信息錯誤。


小總結

這是我點擊提交之後報錯的結果!

可以發現,即使刷新頁面提交,還是會把原來的數據保存下來,並且還有驗證失敗的信息!

Form總結

從上述示例可以發現。

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

生成HTML標籤。 驗證提交的數據。 保留提交之前的數據。

沒錯,它的主要功能其實也就是這。

如果使用Django進行開發,並且使沒有前後端分離的,必用Form組件!

每一份發奮努力的背後,必定有巨大的賞賜。

【編輯推薦】

【責任編輯:

姜華

TEL:(010)68476606】

點讚 0

相關焦點

  • 一篇文章帶你了解Django ORM操作(高端篇)
    回復「書籍」即可獲贈Python從入門到進階共10本電子書前言
  • Django Form表單完整使用流程
    不僅可以輸入整個表單,而且還可以指定欄位輸出,如下所示:In [12]: pl=ExampleForm({"b":"django","c":10})In [13]: print(pl["b"])<input type="text" name="b" value="django" maxlength="20" required id="id_b
  • Django Form表單API詳解
    如果你有一個綁定的 Form 實例,但是你想更改數據或者你想給一個未綁定的 Form 表單綁定一些數據,此時你需要創建一個新 Form 實例。因為 Form 實例一旦創建,它的數據將不可變。那麼各位小夥伴可以試一試,如果傳遞的是個空字典又會怎麼樣呢?猜一猜它的返回值是 True 還是 False 呢?
  • 一個完整的Django入門指南
    我的想法是在文章中穿插一些漫畫的方式來演示說明相應的概念和場景。我希望大家能夠享受這種閱讀!當年我在一所大學擔任代課教授時,我曾經在計算機科學專業給新來的學生講授網絡開發學科。那時我總是會用下面這個孔夫子的名言開始新的課程:(譯者註:不確定是孔子講的,但這句話早在中國古代就有所提到,出自荀子《儒效篇》「不聞不若聞之,聞之不若見之,見之不若知之,知之不若行之;學至於行之而止矣」)所以,請動起手來!
  • Django 2.0 項目實戰: 擴展Django自帶User模型,實現用戶註冊與登錄
    本文會教你在不自建User模型的情況下實現用戶的註冊與登陸。另外,我們會對Django Auth自帶的User模型進行擴展,允許用戶添加更多的個人信息。由於全文非常的長,我們會分3部分推送,歡迎訂閱我的微信公眾號【Python與Django大咖之路】獲取最新文章。
  • Python+django網頁設計入門(12):使用Bootstrap和jQuery
    前導課程:Python+django網頁設計入門(11):在線考試與自動評分Python+django網頁設計入門(10):分頁顯示Python+django網頁設計入門(9):自定義反爬蟲功能Python+django網頁設計入門(8):網站項目文件夾布局Python+django網頁設計入門
  • django-admin和manage.py用法
    金句:所有的天賦,都來自於你對你喜歡的某種事物的模仿與學習,否則你就不會有這種天賦。記錄要點:django-admin和manage.py 能做同樣的事情 像我們常用的python manage.py runserver,用django-admin也可以操作:django-admim runserver 注意: django-admin需要提前提前配置好DJANGO_SETTINGS_MODULE環境變量
  • 一篇文章帶你了解HTML語法
    2.段落一篇文章除了標題,當然就是一個個段落了,段落中我們常常使用的標籤有p標籤,寫法同上,只是標籤名不同而已。4.換行,水平線    當我們寫文章時必須要換行,有時候還要使用水平線進行分割才能讓文章顯得更有層次感,那麼該怎麼做了,也是很簡單的。
  • Django基礎(10): URL重定向的HttpResponseDirect, redirect和reverse的用法詳解
    如果你學習的是Python Web開發和Django,本公眾號絕對不會讓你失望,我會爭取所有文章做到清晰易懂,原創免費。如果你是老鳥,本公眾號的內容也可以作為系統性的參考資料。利用django開發web應用, 我們經常需要進行URL重定向,有時候還需要給URL傳遞額外的參數。比如用戶添加文章完成後需要轉到文章列表或某篇文章詳情。
  • 8個能提高Django開發效率的Python包
    但是在此之前,你可以先看看我們之前寫的有關如何讓Django 管理更加安全的技巧,以及一篇關於5個最喜歡的開源Django包的文章。如果你在運營一個新聞網站,需要撰寫、編輯和發表文章,django-fsm可以幫助你定義這些狀態,並管理從一個狀態轉移到另一個狀態的規則和限制。Django-fsm提供了一個FSMField,用於定義模型實例狀態的model屬性。然後,您可以使用django-fsm的@transition裝飾器來定義將模型實例從一種狀態移動到另一種狀態的方法,並處理該轉換帶來的任何副作用。
  • 10道題教你使用python Django框架來實現web應用,值得收藏
    這個操作我的教程「Python Django帶你構建Web應用」裡有。進入django項目根目錄。python manage.py runserver運行內置的Web伺服器。預設提供服務的IP位址是127.0.0.1,埠是8000。如果希望對外提供服務,可以修改為真實的IP位址,例如想要使用1.1.1.1:8080對外提供服務。
  • 微信小程序 | checkbox 組件,form 組件,input 組件
    checkbox 組件為一個多選框被放到 checkbox-group 組中,並在 checkbox-group(只能包含checkbox)中設置監聽事件。checkbox-group 監聽方法:form 表單組件 是提交 form 內的所有選中屬性的值,注意每個 form 表單內的組件都必須有 name
  • Django入門學習教程
    內容的html部分,界面不是很好看,不過這不是重點,主要了解操作過程就好了。tr>    {% endfor %}    </tbody></table></body></html>Views.pyfrom django.shortcuts
  • python程式設計師嘔心瀝血整理 Django 優秀資源大全
    django-autocomplete-light, star:794 - django-autocomplete-light 的目標是在 Django 項目中快速而適當地實現自動填充功能。django-bootstrap-form, star:485 - 將 Twitter Bootstrap 使用到 Django 表單中。
  • 資源|Django全棧工程師學習
    這些教程可作為 Django的入門教材,對你會有一定的幫助。自從10年前Django問世以來,它就一直處在更新換代的過程中。研發人員對其進行了大量的更新,進一步提高了Django的實用性。當你想要獲得關於Django的最新更新說明時,你就需要仔細閱讀下面的介紹了。
  • 考公務員,一篇文章帶你申論入門!
    請就她的觀點談談你的看法。3. 應用文寫作題如:省裡召開扶貧工作座談會,邀請小趙介紹發展花椒醬產業的經驗。根據「給定資料2」,請為小趙寫一份發言提綱。4.議論文寫作如:深入思考「跟著時代的大潮往前走,盡到我所有的力量,做好我要做的事情」,自選角度,聯繫實際,自擬題目,寫一篇文章。
  • 如果你是完美主義者,那麼Django就是你的菜!
    的後臺管理員帳號,與login文件中的form表單中的username沒有任何關係。', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware
  • 一篇文章帶你了解Java中的抽象類和接口知識
    後臺回復「Java」即可獲贈Java學習資料    前面幾篇文章用
  • Django實戰教程: 開發企業級應用智能文檔管理系統smartdoc(1)
    今天小編我就帶你用Django開發一個企業級應用,一個名叫smartdoc的網絡智能文檔管理系統。在閱讀本文前,請一定先閱讀Django核心基礎(3): View視圖詳解。一旦你使用通用視圖,你就會愛上她。這是因為我們視圖部分會直接使用Django的通用視圖。如果你對代碼有疑問,歡迎評論區留言。
  • 一篇文章帶你了解UR優傲機器人
    一篇文章帶你了解UR優傲機器人 2019年06月11日 13:10作者:黃頁編輯:黃頁 此外機器人沒有額外的硬體配置,UR協作機器人的開放性可以在無需外部組件的情況下,輕鬆與平板電腦實現交互。這也就是許多研究性高校偏愛使用UR協作機器人的原因。 機器人優傲機器人作為市場上獨一同時具備簡單、靈活和安全三大特點的協作機器人,UR早已獲得了大眾汽車、強生等多家知名品牌的青睞。我們機器人的加入幫助客戶打造了更加合理靈活的生產流程,並為員工提供了健康安全的工作環境。