Django框架(十七):Form組件之基本功能初識

前言在前端頁面輸入數據,數據進入數據庫或者後臺邏輯之前,往往需要對數據的類型、格式、長度等一系列屬性進行驗證;若僅僅使用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數據的圖:

 

發佈了220 篇原創文章 · 獲贊 103 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章