1. 程式人生 > >Django - 表單使用

Django - 表單使用

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 指明向表單中新增模型類的哪個欄位