django開發系列:表單

django開發系列:表單之Form使用

Django中的表單

Django中的表單豐富了傳統的HTML語言中的表單。在Django中的表單,主要做以下兩件事:

  1. 渲染表單模板。(不常用,容易前後端耦合)
  2. 表單驗證數據是否合法。

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 MesssageBoardForm(forms.Form):
    title = forms.CharField(max_length=100,min_length=2,label='標題',error_messages={"min_length":"最少不能少於1個字符!"})
    content = forms.CharField(widget=forms.Textarea,label='內容',error_messages={"required":"必須要傳content字段!"})
    email = forms.EmailField(label='郵箱',error_messages={"required":'必須要傳email字段!'})
    reply = forms.BooleanField(required=False,label='是否回覆')

在視圖中,根據是GET還是POST請求來做相應的操作。如果是GET請求,那麼返回一個空的表單,如果是POST請求,那麼將提交上來的數據進行校驗。

from django.shortcuts import render
from django.views.generic import View
from .forms import MesssageBoardForm
from django.http import HttpResponse
from django.forms.utils import ErrorDict

class IndexView(View):
    def get(self,request):
        form = MesssageBoardForm()
        return render(request,'index.html',context={"form":form})

    def post(self,request):
        form = MesssageBoardForm(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('='*30)
            print(title)
            print(content)
            print(email)
            print(reply)
            print('='*30)
            return HttpResponse('success')
        else:
            print(form.errors.get_json_data())
            return HttpResponse('fail')

在使用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添加鍵值對後可修改錯誤提示,修改後的表單類.errors.get_json_data()方法返回值如下:

{'title': [{'message': '字符至少5個,至多100個', 'code': 'min_length'}], 'content': [{'message': '要有content內容', 'code': 'required'}], 'email': [{'message': '必須是郵箱格式', 'code': 'required'}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章