Django2.0-表單(1)-Form使用
阿新 • • 發佈:2018-12-21
Django中的表單
Django
中的表單豐富了傳統的HTML
語言中的表單。在Django
中的表單,主要做以下兩件事:
- 渲染表單模板。(不常用,容易前後端耦合)
- 表單驗證資料是否合法。
Django中表單使用流程
在一個app中新建一個forms.py
,定義一個表單類,繼承自django.forms.Form
。
Field欄位名稱在html中對應的是<input type="text" name="field_name" >
中input標籤的name屬性
比如title欄位在html中就是<input type="text" name="title">
from django import forms
class FormTable(forms.Form):
# label是渲染欄位的名稱(預設是變數名),error_messages的鍵值對是{"'code'對應的值": "你想要顯示的內容"}
title = forms.CharField(min_length=5, max_length=100, label="標題",
error_messages={"min_length": "字元至少5個,至多100個"})
content = forms.CharField(widget=forms.Textarea, label="內容",
error_messages={"required": "要有content內容"})
email = forms.EmailField(label="郵箱", error_messages={"required": "必須是郵箱格式"})
reply = forms.BooleanField(required=False, label="是否回覆")
在檢視中,根據是GET
還是POST
請求來做相應的操作。如果是GET
請求,那麼返回一個空的表單,如果是POST
請求,那麼將提交上來的資料進行校驗。
# views.py
from django.shortcuts import render,HttpResponse
from django.views.generic import View # 載入檢視類
from .forms import FormTable # 載入表單類
# Create your views here.
# from django.forms.utils import ErrorDict # 這個是表單類的errors的型別
class MessageForm(View):
def get(self, request):
form = FormTable()
return render(request, "index.html", context={"form": form})
def post(self, request):
form = FormTable(request.POST)
if form.is_valid(): # 如果各個欄位合法
title = form.cleaned_data.get("title")
content = form.cleaned_data.get("content")
email = form.cleaned_data.get("email")
reply = form.cleaned_data.get("reply")
print("title: {}\ncontentL {}\nemail: {}\nreply: {}\n".format(title,content,email,reply))
return HttpResponse("success")
else:
print(type(form.errors))
print(form.errors.get_json_data())
return HttpResponse("failure")
在使用GET
請求的時候,我們傳了一個form
給模板,那麼以後模板就可以使用form
來生成一個表單的html
程式碼。在使用POST
請求的時候,我們根據前端上傳上來的資料,構建一個新的表單,這個表單是用來驗證資料是否合法的,如果資料都驗證通過了,那麼我們可以通過cleaned_data
來獲取相應的資料。在模板中渲染表單的HTML
程式碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
<table>
{{ form.as_table }}
<tr>
<td></td>
<td><input type="submit" name="提交" ></td>
</tr>
</table>
</form>
</body>
</html>
我們在最外面給了一個form
標籤,然後在裡面使用了table
標籤來進行美化,在使用form
物件渲染的時候,使用的是table
的方式,當然還可以使用ul
的方式(as_ul
),也可以使用p
標籤的方式(as_p
),並且在後面我們還加上了一個提交按鈕。這樣就可以生成一個表單了
下面是表單類.errors.get_json_data()方法返回的值
{'title': [{'message': 'Ensure this value has at least 5 characters (it has 4).', 'code': 'min_length'}], 'content': [{'message': 'This field is required.', 'code': 'required'}], 'email': [{'message': 'This field is required.', 'code': 'required'}]
在表單類(這裡是FormTable
)中給各個欄位新增errors_message
新增鍵值對後可修改錯誤提示
{'title': [{'message': '字元至少5個,至多100個', 'code': 'min_length'}], 'content': [{'message': '要有content內容', 'code': 'required'}], 'email': [{'message': '必須是郵箱格式', 'code': 'required'}]}