日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django(part45)--forms模块

發(fā)布時間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django(part45)--forms模块 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學(xué)習(xí)筆記,僅供參考


文章目錄

    • Django中的forms模塊
      • 使用forms模塊的步驟
      • 定義表單類的語法
      • 在模板中解析form對象
      • 內(nèi)置小部件widget
      • 舉個例子



Django中的forms模塊


在Django中提供了forms模塊,用forms模塊可以自動生成form表單的內(nèi)部的表單控件,同時,在服務(wù)器端可以用對象的形式接收并操作客戶端表單元素并能對表單的數(shù)據(jù)進(jìn)行服務(wù)器端驗證。


  • forms模塊的作用

通過forms模塊,允許將表單與class相結(jié)合,允許通過class生成表單


使用forms模塊的步驟


  • 應(yīng)用中創(chuàng)建forms.py模塊

  • 導(dǎo)入django提供的forms
import django import forms
  • 定義表單類(一個class會生成一個表單)
class FormName(forms.Form):pass
  • 在表單類中增加類屬性

一個類屬性對應(yīng)表單中的一個控件。


  • 利用forms.Form類型的對象自動(或手動)生成表單內(nèi)容

  • 讀取form表單并進(jìn)行驗證數(shù)據(jù)

定義表單類的語法


類屬性 = forms.Field類型(參數(shù))
  • Field類型
class ClassName(froms.Form):forms.CharField() #文本框 <input type="text">forms.ChoiceField() #下拉選項框 <select>forms.DateField() #日期框 <input type="date">
  • 參數(shù)
label #控件前的文本 widget #指定小部件 initial #控件的初始值(主要針對文本框類型) required #是否為必填項,值為(True/False),默認(rèn)為True

在模板中解析form對象


  • 解析form對象

在視圖中創(chuàng)建form對象,并將其發(fā)送到模板文件中進(jìn)行解析:

def viewsName(request):form = forms.FormName()return render(request,'xx.html',locals())

在模板文件中解析:

<!--手動解析--> {% for field in form %} {{field.label}}: {{field}} <!--field.label表示的是label參數(shù)值, field表示的是表單控件--> {% endfor %}<!--自動解析--> {{form.as_p}} <!--將form中的每個屬性(控件/文本)都使用p標(biāo)記包裹起來再顯示--> {{form.as_ul}} <!--將form中的每個屬性(控件/文本)都使用li標(biāo)記包裹起來再顯示--> <!--必須手動提供ol或ul標(biāo)記--> {{form.as_table}} <!--將form中的每個屬性(控件/文本)都使用tr標(biāo)記包裹起來再顯示--> <!--必須手動提供table標(biāo)記-->

內(nèi)置小部件widget


  • 什么是小部件

小部件是指,生成在網(wǎng)頁上的控件以及一些html屬性。


  • 常用的小部件類型
widget名稱對應(yīng)和type類值
TextInputtype=‘text’
PasswordInputtype=‘password’
NumberInputtype=“number”
EmailInputtype=“email”
URLInputtype=“url”
HiddenInputtype=“hidden”
CheckboxInputtype=“checkbox”
CheckboxSelectMultipletype=“checkbox”
RadioSelecttype=“radio”
Textareatextarea標(biāo)記(大文本框)
Selectselect標(biāo)記
SelectMultipleselect multiple 標(biāo)記

  • 小部件的使用

語法1:

類屬性 = forms.CharField(label='xxx',widget=forms.小部件類型 )

語法2(在指定控件類型的基礎(chǔ)之上還能指定控件的一些html屬性值):

類屬性 = forms.CharField(label='xxx',widget=forms.小部件類型(attrs={'html屬性名':'值','html屬性名':'值',}) )

舉個例子


首先,我們在userinfo應(yīng)用下創(chuàng)建一個表單模塊forms.py:

在forms.py模塊中,我們敲入如下代碼:

# -*- coding: utf-8 -*- from django import formsclass RegForm(forms.Form):username = forms.CharField(label = "輸入昵稱")password = forms.CharField(label = "輸入密碼")passwordRepeat = forms.CharField(label = "再次輸入密碼")#<input type="text">

在userinfo應(yīng)用的模板文件夾templates下創(chuàng)建一個新的模板test_form.html:

在userinfo應(yīng)用的urls.py文件中,我們添加一個路由:

from django.urls import re_path from . import viewsurlpatterns = [re_path(r'^test_form/', views.test_form), ]

在userinfo應(yīng)用的views.py模塊中,我們添加一個視圖函數(shù):

def test_form(request):if request.method == "GET":myform = forms.RegForm()#創(chuàng)建對象return render(request, 'userinfo/test_form.html',locals())else:print("其他請求")

在test_form.html模板中,我們敲入如下代碼:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>form表單</title> </head> <body><form action="/userinfo/test_form/" method="POST">{% csrf_token %}{{myform.as_p}}{# 自動生成form表單的內(nèi)部的表單控件 #}</form> </body> </html>

我們向http://127.0.0.1:8000/userinfo/test_form/發(fā)起請求:


由于提交表單數(shù)據(jù)的按鈕不能用forms類自動生成,所以我們在test_form.html模塊中自己加一個提交按鈕:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>form表單</title> </head> <body><form action="/userinfo/test_form/" method="POST">{% csrf_token %}{{myform.as_p}}{# 自動生成form表單的內(nèi)部的表單控件 #}<input type="submit" value="注冊"></form> </body> </html>

在forms.py模塊中,我又添加了一個手機(jī)號輸入框,并設(shè)置此框內(nèi)容可為空:

from django import formsclass RegForm(forms.Form):username = forms.CharField(label = "輸入昵稱")password = forms.CharField(label = "輸入密碼")passwordRepeat = forms.CharField(label = "再次輸入密碼")tele = forms.CharField(label = "手機(jī)號", required = False)#<input type="text">

我們再次向http://127.0.0.1:8000/userinfo/test_form/發(fā)起請求:

我們看一下該頁面的源代碼:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>form表單</title> </head> <body><form action="/userinfo/test_form/" method="POST"></form><input type="hidden" name="csrfmiddlewaretoken" value="bGxM5HvNFrdDqh30zlC1slBqKRmlSTUHlJz7EHabBgZydsv9KVHEjqAiM4qEaNeg"><p><label for="id_username">輸入昵稱:</label> <input type="text" name="username" required id="id_username"></p> <p><label for="id_password">輸入密碼:</label> <input type="text" name="password" required id="id_password"></p> <p><label for="id_passwordRepeat">再次輸入密碼:</label> <input type="text" name="passwordRepeat" required id="id_passwordRepeat"></p> <p><label for="id_tele">手機(jī)號:</label> <input type="text" name="tele" id="id_tele"></p><input type="submit" value="注冊"> </body> </html>

現(xiàn)在,我們給我們的表單加一些小部件,比如將文本框改為密碼輸入框:

from django import formsclass RegForm(forms.Form):username = forms.CharField(label = "輸入昵稱")password = forms.CharField(label = "輸入密碼",widget=forms.PasswordInput)passwordRepeat = forms.CharField(label = "再次輸入密碼",widget=forms.PasswordInput)tele = forms.CharField(label = "手機(jī)號", required = False)email = forms.CharField(label = "郵箱", required = False,widget=forms.EmailInput)

我們再次向http://127.0.0.1:8000/userinfo/test_form/發(fā)起請求:

總結(jié)

以上是生活随笔為你收集整理的Django(part45)--forms模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。