Django - 表單使用
阿新 • • 發佈:2018-11-11
Django提供對錶單處理的支援,可以簡化並自動化大部分的表單處理工作。
1 定義表單類
表單系統的核心部分是Django 的Form類。 Django 的資料庫模型描述一個物件的邏輯結構、行為以及展現給我們的方式,與此類似,Form類描述一個表單並決定它如何工作和展現。
假如我們想在網頁中建立一個表單,用來獲取使用者想儲存的圖書資訊,可能類似的html 表單如下:
<form action="" method="post"> <input type="text" name="title"> <input type="date" name="pub_date"> <input type="submit"> </form>
我們可以據此來建立一個Form類來描述這個表單。
新建一個forms.py檔案,編寫Form類。
from django import forms
class BookForm(forms.Form):
title = forms.CharField(label="書名", required=True, max_length=50)
pub_date = forms.DateField(label='出版日期', required=True)
2 檢視中使用表單類
from django.shortcuts import render from django.views.generic import View from django.http import HttpResponse from .forms import BookForm class BookView(View): def get(self, request): form = BookForm() return render(request, 'book.html', {'form': form}) def post(self, request): form = BookForm(request.POST) if form.is_valid(): # 驗證表單資料 print(form.cleaned_data) # 獲取驗證後的表單資料 return HttpResponse("OK") else: return render(request, 'book.html', {'form': form})
- form.is_valid() 驗證表單資料的合法性
- form.cleaned_data 驗證通過的表單資料
3 模板中使用表單類
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>書籍</title> </head> <body> <form action="" method="post"> {% csrf_token %} {{ form }} <input type="submit"> </form> </body> </html>
- csrf_token 用於新增CSRF防護的欄位
- form 快速渲染表單欄位的方法
4 模型類表單
如果表單中的資料與模型類對應,可以通過繼承forms.ModelForm更快速的建立表單。
class BookForm(forms.ModelForm):
class Meta:
model = BookInfo
fields = ('btitle', 'bpub_date')
- model 指明從屬於哪個模型類
- fields 指明向表單中新增模型類的哪個欄位