beego獲取用戶請求參數的方法

咱們常常須要獲取用戶傳遞的數據,包括 Get、POST 等方式的請求,beego 裏面會自動解析這些數據,你能夠經過以下方式獲取數據:html

  • GetString(key string) string
  • GetStrings(key string) []string
  • GetInt(key string) (int64, error)
  • GetBool(key string) (bool, error)
  • GetFloat(key string) (float64, error)

使用例子以下:json

func (this *MainController) Post() {
    jsoninfo := this.GetString("jsoninfo")
    if jsoninfo == "" {
        this.Ctx.WriteString("jsoninfo is empty")
        return
    }
}

  

若是你須要的數據多是其餘類型的,例如是 int 類型而不是 int64,那麼你須要這樣處理:mvc

func (this *MainController) Post() {
    id := this.Input().Get("id")
    intid, err := strconv.Atoi(id)
}

  

更多其餘的 request 的信息,用戶能夠經過 this.Ctx.Request 獲取信息,關於該對象的屬性和方法參考手冊Requestthis

直接解析到 struct

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

定義struct:code

type user struct {
    Id    int         `form:"-"`
    Name  interface{} `form:"username"`  //對應表單中的name值,字段名首字母也必須大寫,不然沒法解析該參數的值
    Age   int         `form:"age"`	//對應表單中的name值,若是不寫將沒法解析該參數的值
    Email string
}

  

表單:orm

<form id="user">
    名字:<input name="username" type="text" />
    年齡:<input name="age" type="text" />
    郵箱:<input name="Email" type="text" />
    <input type="submit" value="提交" />
</form>

  

Controller 裏解析:htm

func (this *MainController) Post() {
    u := user{}
    if err := this.ParseForm(&u); err != nil {
        //handle error
    }
}

  

注意:對象

  • StructTag form 的定義和 renderform方法 共用一個標籤
  • 定義 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 標籤的值設置爲 -
相關文章
相關標籤/搜索