日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

golang表单及验证支持

發布時間:2025/6/15 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang表单及验证支持 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Web開發中對于這樣的一個流程可能很眼熟:

  • 打開一個網頁顯示出表單。
  • 用戶填寫并提交了表單。
  • 如果用戶提交了一些無效的信息,或者可能漏掉了一個必填項,表單將會連同用戶的數據和錯誤問題的描述信息返回。
  • 用戶再次填寫,繼續上一步過程,直到提交了一個有效的表單。

在接收端,腳本必須:

  • 檢查用戶遞交的表單數據。
  • 驗證數據是否為正確的類型,合適的標準。例如,如果一個用戶名被提交,它必須被驗證是否只包含了允許的字符。它必須有一個最小長度,不能超過最大長度。用戶名不能與已存在的他人用戶名重復,甚至是一個保留字等。
  • 過濾數據并清理不安全字符,保證邏輯處理中接收的數據是安全的。
  • 如果需要,預格式化數據(數據需要清除空白或者經過HTML編碼等等。)
  • 準備好數據,插入數據庫。

盡管上面的過程并不是很復雜,但是通常情況下需要編寫很多代碼,而且為了顯示錯誤信息,在網頁中經常要使用多種不同的控制結構。創建表單驗證雖簡單,實施起來實在枯燥無味。

表單和驗證

對于開發者來說,一般開發過程都是相當復雜,而且大多是在重復一樣的工作。假設一個場景項目中忽然需要增加一個表單數據,那么局部代碼的整個流程都需要修改。我們知道Go里面struct是常用的一個數據結構,因此beego的form采用了struct來處理表單信息。

首先定義一個開發Web應用時相對應的struct,一個字段對應一個form元素,通過struct的tag來定義相應的元素信息和驗證信息,如下所示:

type User struct{Username string `form:text,valid:required`Nickname string `form:text,valid:required`Age int `form:text,valid:required|numeric`Email string `form:text,valid:required|valid_email`Introduce string `form:textarea` }

定義好struct之后接下來在controller中這樣操作

func (this *AddController) Get() {this.Data["form"] = beego.Form(&User{})this.Layout = "admin/layout.html"this.TplNames = "admin/add.tpl" }

在模板中這樣顯示表單

<h1>New Blog Post</h1> <form action="" method="post"> {{.form.render()}} </form>

上面我們定義好了整個的第一步,從struct到顯示表單的過程,接下來就是用戶填寫信息,服務器端接收數據然后驗證,最后插入數據庫。

func (this *AddController) Post() {var user Userform := this.GetInput(&user)if !form.Validates() {return }models.UserInsert(&user)this.Ctx.Redirect(302, "/admin/index") }

表單類型

以下列表列出來了對應的form元素信息:

名稱參數功能描述
textNotextbox輸入框
buttonNo按鈕
checkboxNo多選擇框
dropdownNo下拉選擇框
fileNo文件上傳
hiddenNo隱藏元素
passwordNo密碼輸入框
radioNo單選框
textareaNo文本輸入框

表單驗證

以下列表將列出可被使用的原生規則

規則參數描述舉例
requiredNo如果元素為空,則返回FALSE?
matchesYes如果表單元素的值與參數中對應的表單字段的值不相等,則返回FALSEmatches[form_item]
is_uniqueYes如果表單元素的值與指定數據表欄位有重復,則返回False(譯者注:比如is_unique[User.Email],那么驗證類會去查找User表中Email欄位有沒有與表單元素一樣的值,如存重復,則返回false,這樣開發者就不必另寫Callback驗證代碼。)is_unique[table.field]
min_lengthYes如果表單元素值的字符長度少于參數中定義的數字,則返回FALSEmin_length[6]
max_lengthYes如果表單元素值的字符長度大于參數中定義的數字,則返回FALSEmax_length[12]
exact_lengthYes如果表單元素值的字符長度與參數中定義的數字不符,則返回FALSEexact_length[8]
greater_thanYes如果表單元素值是非數字類型,或小于參數定義的值,則返回FALSEgreater_than[8]
less_thanYes如果表單元素值是非數字類型,或大于參數定義的值,則返回FALSEless_than[8]
alphaNo如果表單元素值中包含除字母以外的其他字符,則返回FALSE?
alpha_numericNo如果表單元素值中包含除字母和數字以外的其他字符,則返回FALSE?
alpha_dashNo如果表單元素值中包含除字母/數字/下劃線/破折號以外的其他字符,則返回FALSE?
numericNo如果表單元素值中包含除數字以外的字符,則返回 FALSE?
integerNo如果表單元素中包含除整數以外的字符,則返回FALSE?
decimalYes如果表單元素中輸入(非小數)不完整的值,則返回FALSE?
is_naturalNo如果表單元素值中包含了非自然數的其他數值 (其他數值不包括零),則返回FALSE。自然數形如:0,1,2,3....等等。?
is_natural_no_zeroNo如果表單元素值包含了非自然數的其他數值 (其他數值包括零),則返回FALSE。非零的自然數:1,2,3.....等等。?
valid_emailNo如果表單元素值包含不合法的email地址,則返回FALSE?
valid_emailsNo如果表單元素值中任何一個值包含不合法的email地址(地址之間用英文逗號分割),則返回FALSE。?
valid_ipNo如果表單元素的值不是一個合法的IP地址,則返回FALSE。?
valid_base64No如果表單元素的值包含除了base64 編碼字符之外的其他字符,則返回FALSE。

總結

以上是生活随笔為你收集整理的golang表单及验证支持的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。