自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 前端
本次咱們來get一個新技能,Form組件。Form組件,只適用于,前后端未分離的項目中,主要用于驗證表單數(shù)據(jù),所以,關(guān)鍵字是表單!!!

 [[375178]]

前言

Hey,大家好呀,我是碼農(nóng),星期八。

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

Form組件主要用于驗證表單數(shù)據(jù)。

為什么需要Form組件

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

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


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

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

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

普通版注冊

代碼

urls.py

  1. from django.urls import path 
  2. from web import views 
  3.  
  4. urlpatterns = [ 
  5.     path('reg/', views.reg,), 

web/views.py

  1. def reg(request): 
  2.     if request.method == "GET"
  3.         return render(request, "reg.html"
  4.  
  5.     nick = request.POST.get("nick"
  6.     pwd = request.POST.get("pwd"
  7.     phone = request.POST.get("phone"
  8.  
  9.     error = {} 
  10.     if len(pwd) < 6: 
  11.         error["pwd"] = "密碼小于6位" 
  12.     if len(phone) != 11: 
  13.         error["phone"] = "手機號格式錯誤" 
  14.  
  15.     # error為空表示未觸發(fā)異常 
  16.     if not error: 
  17.         print("寫入數(shù)據(jù)庫", nick, pwd, phone) 
  18.         return HttpResponse("注冊成功"
  19.     else
  20.         return render(request, "reg.html", {"error": error}) 

templates/reg.html

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3. <head> 
  4.     <meta charset="UTF-8"
  5.     <title>登錄</title> 
  6. </head> 
  7. <body> 
  8. <div style="width: 40%;margin: auto"
  9.     <form action="" method="post"
  10.         <div><input name="nick" type="text" placeholder="昵稱"></div> 
  11.         <div> 
  12.             <input name="pwd" type="password" placeholder="密碼"
  13.             <span>{{ error.pwd }}</span> 
  14.         </div> 
  15.         <div> 
  16.             <input name="phone" type="text" placeholder="手機號"
  17.             <span>{{ error.phone }}</span> 
  18.         </div> 
  19.         <div><input type="submit"></div> 
  20.     </form> 
  21. </div> 
  22.  
  23. </body> 
  24. </html> 

實現(xiàn)效果

如果填寫的信息正常。

填寫信息

 

 

跳轉(zhuǎn)之后


如果填寫的信息錯誤。

填寫信息


錯誤提示


小總結(jié)

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

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

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

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

Form組件版注冊

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


代碼

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

urls.py

同上

web/views.py

  1. from django.shortcuts import render, HttpResponse 
  2. from django.forms import Form 
  3. from django.forms import fields 
  4. from django.forms import widgets 
  5.  
  6.  
  7. Create your views here. 
  8. class RegForm(Form): 
  9.     name = fields.CharField( 
  10.         widget=widgets.TextInput(attrs={"placeholder""昵稱"}) 
  11.     ) 
  12.     pwd = fields.CharField( 
  13.         min_length=6, 
  14.         widget=widgets.TextInput(attrs={"placeholder""密碼"}) 
  15.     ) 
  16.     phone = fields.CharField( 
  17.         min_length=11, 
  18.         max_length=11, 
  19.         widget=widgets.TextInput(attrs={"placeholder""手機號"}) 
  20.     ) 
  21.  
  22.  
  23. def reg(request): 
  24.     if request.method == "GET"
  25.         form = RegForm() 
  26.         return render(request, "reg.html", {"form": form}) 
  27.     form = RegForm(request.POST, request.FILES) 
  28.     # 驗證表單數(shù)據(jù) 
  29.     if form.is_valid(): 
  30.         result = form.clean() 
  31.         print(result) 
  32.         return HttpResponse("登錄"
  33.     return render(request, "reg.html", {"form": form}) 

templates/reg.html

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3. <head> 
  4.     <meta charset="UTF-8"
  5.     <title>登錄</title> 
  6. </head> 
  7. <body> 
  8. <div style="width: 40%;margin: auto"
  9.     <form action="" method="post" novalidate> 
  10.         {% for foo in form %} 
  11.             <div> 
  12.                 {{ foo }} 
  13.                 <span style="color: red">{{ foo.errors.0 }}</span> 
  14.             </div> 
  15.         {% endfor %} 
  16.         <div><input type="submit"></div> 
  17.     </form> 
  18. </div> 
  19.  
  20. </body> 
  21. </html> 

實現(xiàn)效果

如果填寫的信息正常。

同上

如果填寫的信息錯誤。


小總結(jié)

這是我點擊提交之后報錯的結(jié)果!

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

Form總結(jié)

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

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

  • 生成HTML標簽。
  • 驗證提交的數(shù)據(jù)。
  • 保留提交之前的數(shù)據(jù)。

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

如果使用Django進行開發(fā),并且使沒有前后端分離的,必用Form組件!

每一份發(fā)奮努力的背后,必定有巨大的賞賜。

 

責任編輯:姜華 來源: Python爬蟲與數(shù)據(jù)挖掘
相關(guān)推薦

2020-12-29 09:05:48

基礎(chǔ)DjangoORM

2021-01-05 09:07:30

Django ORMF查詢Q查詢

2021-01-01 09:20:20

操作DjangoORM

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2021-01-14 09:04:27

Django FormForm組件開發(fā)

2022-02-21 09:44:45

Git開源分布式

2020-11-10 10:48:10

JavaScript屬性對象

2021-01-29 18:41:16

JavaScript函數(shù)語法

2021-02-02 18:39:05

JavaScript

2021-06-04 09:56:01

JavaScript 前端switch

2023-07-30 15:18:54

JavaScript屬性

2023-05-08 08:21:15

JavaNIO編程

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結(jié)構(gòu)前端

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2021-06-24 09:05:08

JavaScript日期前端

2021-09-27 09:18:30

ListIterato接口方法

2023-09-06 14:57:46

JavaScript編程語言

2024-01-30 13:47:45

2024-04-19 14:23:52

SwitchJavaScript開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號