Django中的表單(forms.Form)
阿新 • • 發佈:2019-01-29
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='請輸入正確格式的手機號碼!')] )