程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Django】 Form組件

編輯:Python

提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • Form組件使用
  • 局部鉤子和全局鉤子
  • 總結


Django Form 組件用於對頁面進行初始化,生成 HTML 標簽,此外還可以對用戶提交對數據進行校驗(顯示錯誤信息)。

Form組件使用

  1. 創建Fom組件類
# TestDB 文件夾下的 app_example.py
from django import forms
from django.core.exceptions import ValidationError # 錯誤校驗
class MyForm(forms.Form):
# label表示生成的html輸入框前的文字描述
# error_messages表示錯誤信息
name = forms.CharField(min_length=4, label="姓名", error_messages={
"min_length": "長度不能小於4", "required": "該字段不能為空"})
age = forms.IntegerField(label="年齡")
salary = forms.IntegerField(label="工資")
r_salary = forms.IntegerField(label="確認工資")
  1. 定義路由
# 使用路由分發的方式
# HelloDJango為項目根 urls.py
from django.urls import path, include
urlpatterns = [
# forms組件
path("testdb/", include("TestDB.urls")),
]
# TestDB 文件夾下的 urls.py
from django.urls import path
from TestDB import views
urlpatterns = [
# forms組件
path("add_info/", views.addInfo)
]
  1. 定義處理函數
# TestDB 下的views.py
def addInfo(request):
# 直接發送請求為GET,渲染頁面
if request.method == "GET":
form = MyForm()
return render(request, "index.html", {
"form": form})
else:
# 處理表單提交
form = MyForm(request.POST)
if form.is_valid(): # 如果校驗成功
data = form.cleaned_data # 校驗成功的數據放在cleaned_data中
print(data)
return HttpResponse(json.dumps(data, ensure_ascii=False), 'application/json')
else:
print(form.errors)
clean_errors = form.errors.get("__all__")
return render(request, "index.html", {
"form": form, "clean_errors": clean_errors})
  1. html頁面
<body>
<h1>Hello World</h1>
<form action="" method="post">
{% csrf_token %} <!--處理POST提交-->
{
{ form.as_p }} <!--獲取表單元素-->
<input type="submit" vlaue="提交"/>
</form>
</body>
  1. 運行結果

可以通過clean_data獲取校驗成功後的數據
校驗不通過可以obj.errors獲取錯誤

局部鉤子和全局鉤子

可以通過鉤子對字段進行錯誤校驗,使用form提供的ValidationError,導入:

from django.core.exceptions import ValidationError
  • 鉤子的定義:局部鉤子 -》 clean_字段名,如
 # 定義局部鉤子, 以clean_字段名 方式定義
def clean_name(self):
value = self.cleaned_data.get("name")
if value.isdigit():
raise forms.ValidationError("用戶名不能純數字")
else:
return value
  • 全局鉤子
def clean(self):
salary = self.cleaned_data.get("salary")
r_salary = self.cleaned_data.get("r_salary")
if salary == r_salary:
return self.cleaned_data
else:
raise ValidationError("請確認工資一致")

總結

簡單記錄實現forms組件的流程


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved