Django(part45)--forms模块
學習筆記,僅供參考
文章目錄
- Django中的forms模塊
- 使用forms模塊的步驟
- 定義表單類的語法
- 在模板中解析form對象
- 內置小部件widget
- 舉個例子
Django中的forms模塊
在Django中提供了forms模塊,用forms模塊可以自動生成form表單的內部的表單控件,同時,在服務器端可以用對象的形式接收并操作客戶端表單元素,并能對表單的數據進行服務器端驗證。
- forms模塊的作用
通過forms模塊,允許將表單與class相結合,允許通過class生成表單
使用forms模塊的步驟
- 在應用中創建forms.py模塊
- 導入django提供的forms
- 定義表單類(一個class會生成一個表單)
- 在表單類中增加類屬性
一個類屬性對應表單中的一個控件。
- 利用forms.Form類型的對象自動(或手動)生成表單內容
- 讀取form表單并進行驗證數據
定義表單類的語法
類屬性 = forms.Field類型(參數)
- Field類型
- 參數
在模板中解析form對象
- 解析form對象
在視圖中創建form對象,并將其發送到模板文件中進行解析:
def viewsName(request):form = forms.FormName()return render(request,'xx.html',locals())在模板文件中解析:
<!--手動解析--> {% for field in form %} {{field.label}}: {{field}} <!--field.label表示的是label參數值, field表示的是表單控件--> {% endfor %}<!--自動解析--> {{form.as_p}} <!--將form中的每個屬性(控件/文本)都使用p標記包裹起來再顯示--> {{form.as_ul}} <!--將form中的每個屬性(控件/文本)都使用li標記包裹起來再顯示--> <!--必須手動提供ol或ul標記--> {{form.as_table}} <!--將form中的每個屬性(控件/文本)都使用tr標記包裹起來再顯示--> <!--必須手動提供table標記-->內置小部件widget
- 什么是小部件
小部件是指,生成在網頁上的控件以及一些html屬性。
- 常用的小部件類型
| TextInput | type=‘text’ |
| PasswordInput | type=‘password’ |
| NumberInput | type=“number” |
| EmailInput | type=“email” |
| URLInput | type=“url” |
| HiddenInput | type=“hidden” |
| CheckboxInput | type=“checkbox” |
| CheckboxSelectMultiple | type=“checkbox” |
| RadioSelect | type=“radio” |
| Textarea | textarea標記(大文本框) |
| Select | select標記 |
| SelectMultiple | select multiple 標記 |
- 小部件的使用
語法1:
類屬性 = forms.CharField(label='xxx',widget=forms.小部件類型 )語法2(在指定控件類型的基礎之上還能指定控件的一些html屬性值):
類屬性 = forms.CharField(label='xxx',widget=forms.小部件類型(attrs={'html屬性名':'值','html屬性名':'值',}) )舉個例子
首先,我們在userinfo應用下創建一個表單模塊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應用的模板文件夾templates下創建一個新的模板test_form.html:
在userinfo應用的urls.py文件中,我們添加一個路由:
from django.urls import re_path from . import viewsurlpatterns = [re_path(r'^test_form/', views.test_form), ]在userinfo應用的views.py模塊中,我們添加一個視圖函數:
def test_form(request):if request.method == "GET":myform = forms.RegForm()#創建對象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表單的內部的表單控件 #}</form> </body> </html>我們向http://127.0.0.1:8000/userinfo/test_form/發起請求:
由于提交表單數據的按鈕不能用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表單的內部的表單控件 #}<input type="submit" value="注冊"></form> </body> </html>在forms.py模塊中,我又添加了一個手機號輸入框,并設置此框內容可為空:
from django import formsclass RegForm(forms.Form):username = forms.CharField(label = "輸入昵稱")password = forms.CharField(label = "輸入密碼")passwordRepeat = forms.CharField(label = "再次輸入密碼")tele = forms.CharField(label = "手機號", required = False)#<input type="text">我們再次向http://127.0.0.1:8000/userinfo/test_form/發起請求:
我們看一下該頁面的源代碼:
<!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">手機號:</label> <input type="text" name="tele" id="id_tele"></p><input type="submit" value="注冊"> </body> </html>現在,我們給我們的表單加一些小部件,比如將文本框改為密碼輸入框:
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 = "手機號", required = False)email = forms.CharField(label = "郵箱", required = False,widget=forms.EmailInput)我們再次向http://127.0.0.1:8000/userinfo/test_form/發起請求:
總結
以上是生活随笔為你收集整理的Django(part45)--forms模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 屏幕真伪测试软件,如何检测电视屏幕真伪4
- 下一篇: 唯美带君字的有诗意古风网名466个