前言:在前端頁面輸入數據,數據進入數據庫或者後臺邏輯之前,往往需要對數據的類型、格式、長度等一系列屬性進行驗證;若僅僅使用js前端驗證或後端代碼驗證這顯得十分麻煩;於是有了Form組件存在的意義;
一、Form組件的作用、基本使用
ajax方式提交數據與下面form表單提交有些許不同,因爲ajax本身在錯誤的情況下不刷新頁面;https://blog.csdn.net/ak739105231/article/details/83958344
下面是form表單條件的方式;
1.1 Form組件的作用
1.對用戶請求的參數進行驗證(包括ajax請求、form表單請求)
2.生成HTML代碼
3.可以自定義數據的不同錯誤的提示信息,返回給前端
1.2 Form組件的基本使用
舉例場景說明:首先創建一個django的project,進行一系列的配置之後,添加app02應用,然後在其models.py中,創建一個表usersinfo;除id外僅包含兩個字段:username、email;
ok,現在開始基於這個場景進行佈置截圖、代碼截取的說明:
步驟一:創建一個class類,繼承forms.Form
在views.py裏(或者自己另外創建py文件放在app02應用中,到時候在view.py中import)首先import導入django下的forms包及django.forms下的fields包。然後,創建一個class類,繼承forms.Form;該類裏面編寫的需要驗證的字段(注意:字段名稱最好與數據庫名稱一致,後面會解釋其好處)
基本字段解釋:
max_length:字符最大長度;min_length:字符最小長度;required=True時,不可爲空;爲False時,可以爲空;(注意:沒有填寫即不限制)
error_messages字段,裏面是鍵值對;若沒有自定義error_messages字段,也會有默認的error_messages信息,全是英文;
步驟二:繼承forms.Form的類如何在後端、前端使用,如何保存數據進入數據庫?
舉例1:添加用戶功能;
後端函數截圖:後端返回前端頁面,傳入:Form組件實例化的對象;兩種情況:
1.GET方式進入添加頁面時,後端代碼Form組件實例化的對象(無任何值傳入),前端頁面只需顯示輸入框以及相關字段名稱;
2.POST方式保存觸發時,後端代碼Form組件實例化的對象(傳入request.POST),is_valid返回Form組件對數據的驗證結果,若True:驗證成功,使用字段名稱=Form組件實例化對象。cleaned_data['字段名稱']添加入數據庫;若Flase:前端依舊顯示在添加用戶頁面,不過此時需要,顯示輸入內容,及錯誤提示信息error_messages;
前端html文件截圖:前端html在接到後端傳入的Form實例化對象user_obj時,利用{{ 對象。字段名稱}}及{{對象。errors。字段名稱。0}}的方式獲取對應值以及生成對應的html腳本。
Web運行結果頁面截圖:可以看出頁面Form組件的作用:1.驗證數據;2.生成html腳本
舉例2:數據編輯功能;
後端函數截圖:edit頁面與添加頁面唯一的區別就是,一開始進入頁面就需要顯示每一個字段的原有值;
前端html腳本截圖:前端html在接到後端傳入的Form實例化對象user_obj時,利用{{ 對象。字段名稱}}及{{對象。errors。字段名稱。0}}的方式獲取對應值以及生成對應的html腳本;id主要是在form標籤的action鏈接中使用;
Web端顯示結果截圖:
問:Form組件的類(即:繼承forms.Form的類)裏面的字段與數據庫的字段名稱保持一致的好處在哪兒呢?
答:當輸入的數據被From組件驗證後,is_valid()返回結果爲True時,即表示數據驗證正確;這時我們需要與數據庫交互(要麼創建數據、要麼修改數據),需要使用:Form組件實例化對象。cleaned_data['字段名稱']
一般的方式:
models.UserInfo.objects.create(
username=user_obj.cleaned_data['username'],
email=user_obj.cleaned_data['email'],
字段3=user_obj.cleaned_data['字段3'],
…………
)
若:Form組件的類(即:繼承forms.Form的類)裏面的字段與數據庫的字段名稱保持一致:
一句話即可:**Form組件實例化對象。cleaned_data
models.UserInfo.objects.create(
**user_obj.cleaned_data
)
簡單的截一個update數據的圖: