Beego 的Contrller ParseForm的使用方法

 

若是要把表單裏的內容賦值到一個 struct 裏,除了用一個一個獲取再賦值外,beego 提供了經過另一個更便捷的方式,就是經過 struct 的字段名或 tag 與表單字段對應直接解析到 struct。html

 

首先看模板是怎麼提交的post

 

<form id="user" action="/login" method="post">
    <label name="lab_username">username:</label>
    <input type="text" name="username" value="" />
    <label name="lab_pwd">password:</label><input type="password" name="pwd" value="" />
    <input type="submit" name="login" value="Login" />
</form>

 

接下來寫structthis

 

type Cmsuser struct {
    Id         int    `form:"-"`
    Username string `form:"username"`
    Pwd      string `form:"pwd"`
}

這裏面有幾點必須注意指針

1)變量名稱的首字母必須大寫,go lang的規定code

2)其它orm

  • 定義 struct 時,字段名後若是有 form 這個 tag,則會以把 form 表單裏的 name 和 tag 的名稱同樣的字段賦值給這個字段,不然就會把 form 表單裏與字段名同樣的表單內容賦值給這個字段。如上面例子中,會把表單中的 username 和 age 分別賦值給 user 裏的 Name 和 Age 字段,而 Email 裏的內容則會賦給 Email 這個字段。
  • 調用 Controller ParseForm 這個方法的時候,傳入的參數必須爲一個 struct 的指針,不然對 struct 的賦值不會成功並返回xx must be a struct pointer 的錯誤。
  • 若是要忽略一個字段,有兩種辦法,一是:字段名小寫開頭,二是:form 標籤的值設置爲 -

 

這個時候寫好了Router就能夠提交了。htm

func (this *LoginController) Post() {

u := Cmsuser{}
      if err := this.ParseForm(&u); err != nil {

        beego.Info(err)

    } else { //這個地方容易搞錯,記住是沒有錯誤的時候你就得到數據了。

       this.Ctx.WriteString(u.Username + u.Pwd)
    }

}
相關文章
相關標籤/搜索