1. 程式人生 > >Django中的表單(forms.Form)

Django中的表單(forms.Form)

Django中的表單:
1、HTML中的表單:用來提交資料給伺服器的,不管後臺的伺服器用的是Django還是PHP語言還是其他語言
2、Django中的表單:
      ①渲染表單模板
      ②表單驗證資料是否合法
3、Django中表單使用流程:
①app下新建forms.py檔案,內容如下:
from django import forms  # 注意是django下的forms

# ①、定義一個表單
class MessageBoardForm(forms.Form):
    # error_messages欄位,可以自定義某欄位提交時出現錯誤的時候,顯示的錯誤資訊
    title = forms.CharField(max_length=100, label='標題', min_length=2, error_messages={"min_length": '標題字元段不符合要求!'})
    content = forms.CharField(widget=forms.Textarea, label='內容')
    email = forms.EmailField(label='郵箱')
    reply = forms.BooleanField(required=False, label='回覆')

②views.py檔案內容如下:
from one.forms import MessageBoardForm
from django.views.generic import View
# ②、定義GET或者POST方法:根據是GET還是POST請求來做相應的操作
class IndexView(View):
    # 如果是GET請求,那麼返回一個空的表單
    def get(self, request):
        form = MessageBoardForm()
        return render(request, 'one/index.html', {'form': form})
    # 如果是POST請求,那麼將提交上來的資料進行校驗
    def post(self, request):
        form = MessageBoardForm(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:
            # 點上get_json_data()它,列印的錯誤資訊會以json方式顯示
            print(form.errors.get_json_data())
            return HttpResponse('fail')

③index.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" value="提交"></td>
        </tr>
    </table>
</form>
</body>
</html>
在使用GET請求的時候,我們傳了一個form給模板,那麼以後模板就可以使用form來生成一個表單的html程式碼;
在使用POST請求的時候,我們根據前端上傳上來的資料,構建一個新的表單,這個表單是用來驗證資料是否合法的;
如果資料都驗證通過了,那麼我們可以通過cleaned_data來獲取相應的資料。在模板中渲染表單的HTML程式碼如下:

<form action="" method="post">
    <table>
	 {{ form.as_table }}
        <tr>
            <td></td>
            <td><input type="submit" value="提交"></td>
        </tr>
    </table>
</form>
我們在最外面給了一個form標籤,然後在裡面使用了table標籤來進行美化,
在使用form物件渲染的時候,使用的是table的方式,當然還可以使用ul的方式(as_ul),也可以使用p標籤的方式(as_p),
並且在後面我們還加上了一個提交按鈕。這樣就可以生成一個表單了
④urls.py加入路由:
path('', IndexView.as_view()),

4、用於表單驗證常用的Field
CharField:
    max_length:這個欄位值的最大長度
    min_length:這個欄位值的最小長度
    required:這個欄位是否必須,預設是必須的
    error_messages:在某個條件驗證失敗的時候,給出錯誤資訊

EmailField:用來接收郵件,會自動驗證郵件是否合法

FloatField:用來接收浮點型別,並且如果驗證通過後,會將這個欄位的值轉換為浮點型別
    max_value:最大的值
    min_value:最小的值

IntegerField:用來接收整形,並且驗證通過後,會將這個欄位的值轉換為整形
    max_value:最大的值
    min_value:最小的值

URLField:用來接收url格式的字串

5、在驗證某個欄位的時候,可以傳遞一個validators引數用來指定驗證器,進一步對資料進行過濾。
   驗證器有很多,但是很多驗證器我們其實已經通過這個Field或者一些引數就可以指定了。
   比如EmailValidator,我們可以通過EmailField來指定, 
   比如MaxValueValidator,我們可以通過max_value引數來指定。以下是一些常用的驗證器:
	MaxValueValidator:驗證最大值
	MinValueValidator:驗證最小值
	MinLengthValidator:驗證最小長度
	MaxLengthValidator:驗證最大長度
	EmailValidator:驗證是否是郵箱格式
	URLValidator:驗證是否是URL格式
	RegexValidator:如果還需要更加複雜的驗證,那麼我們可以通過正則表示式的驗證器:RegexValidator
    eg:比如現在要驗證手機號碼是否合格,那麼我們可以通過以下程式碼實現:
	forms.py檔案內容如下:
	 class MyForm(forms.Form):
     	     telephone = forms.CharField(
		validators=[validators.RegexValidator("1[345678]\d{9}",
		message='請輸入正確格式的手機號碼!')]
             )