提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔
Django Form 組件用於對頁面進行初始化,生成 HTML 標簽,此外還可以對用戶提交對數據進行校驗(顯示錯誤信息)。
# 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="確認工資")
# 使用路由分發的方式
# 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)
]
# 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})
<body>
<h1>Hello World</h1>
<form action="" method="post">
{% csrf_token %} <!--處理POST提交-->
{
{ form.as_p }} <!--獲取表單元素-->
<input type="submit" vlaue="提交"/>
</form>
</body>
可以通過clean_data獲取校驗成功後的數據
校驗不通過可以obj.errors獲取錯誤
可以通過鉤子對字段進行錯誤校驗,使用form提供的ValidationError,導入:
from django.core.exceptions import ValidationError
# 定義局部鉤子, 以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組件的流程