請求資料處理
#獲取引數
我們經常需要獲取使用者傳遞的資料,包括 Get、POST 等方式的請求,beego 裡面會自動解析這些資料,你可以通過如下方式獲取資料:
GetString(key string) string
GetStrings(key string) []string
GetInt(key string) (int64, error)
GetBool(key string) (bool, error)
GetFloat(key string) (float64, error)
使用例子如下:
func (this *MainController) Post() {
jsoninfo := this.GetString("jsoninfo")
if jsoninfo == "" {
this.Ctx.WriteString("jsoninfo is empty")
return
}
}
如果你需要的資料可能是其他型別的,例如是 int 型別而不是 int64,那麼你需要這樣處理:
func (this *MainController) Post() {
id := this.Input().Get("id")
intid, err := strconv.Atoi(id)
}
更多其他的 request 的資訊,使用者可以通過 this.Ctx.Request 獲取資訊,關於該物件的屬性和方法參考手冊 Request。
#直接解析到 struct
如果要把表單裡的內容賦值到一個 struct 裡,除了用上面的方法一個一個獲取再賦值外,beego 提供了通過另外一個更便捷的方式,就是通過 struct 的欄位名或 tag 與表單欄位對應直接解析到 struct。
定義 struct:
type user struct {
Id int `form:"-"`
Name interface{} `form:"username"`
Age int `form:"age"`
Email string
}
表單:
<form id="user">
名字:<input name="username" type="text" />
年齡:<input name="age" type="text" />
郵箱:<input name="Email" type="text" />
<input type="submit" value="提交" />
</form>
Controller 裡解析:
func (this *MainController) Post() {
u := user{}
if err := this.ParseForm(&u); err != nil {
//handle error
}
}
注意:
1.StructTag form 的定義和 renderform方法 共用一個標籤
2.定義 struct 時,欄位名後如果有 form 這個 tag,則會以把 form 表單裡的 name 和 tag 的名稱一樣的欄位賦值給這個欄位,否則就會把 form 表單裡與欄位名一樣的表單內容賦值給這個欄位。如上面例子中,會把表單中的 username 和 age 分別賦值給 user 裡的 Name 和 Age 欄位,而 Email 裡的內容則會賦給 Email 這個欄位。
3.呼叫 Controller ParseForm 這個方法的時候,傳入的引數必須為一個 struct 的指標,否則對 struct 的賦值不會成功並返回 xx must be a struct pointer 的錯誤。
4.如果要忽略一個欄位,有兩種辦法,一是:欄位名小寫開頭,二是:form 標籤的值設定為 -
#檔案上傳
在 beego 中你可以很容易的處理檔案上傳,就是別忘記在你的 form 表單中增加這個屬性 enctype="multipart/form-data"
,否則你的瀏覽器不會傳輸你的上傳檔案。
檔案上傳之後一般是放在系統的記憶體裡面,如果檔案的 size 大於設定的快取記憶體大小,那麼就放在臨時檔案中,預設的快取記憶體是 64M,你可以通過如下來調整這個快取記憶體大小:
beego.MaxMemory = 1<<22
或者在配置檔案中通過如下設定:
maxmemory = 1<<22
Beego 提供了兩個很方便的方法來處理檔案上傳:
GetFile(key string) (multipart.File, *multipart.FileHeader, error)
該方法主要用於使用者讀取表單中的檔名 the_file,然後返回相應的資訊,使用者根據這些變數來處理檔案上傳:過濾、儲存檔案等。
SaveToFile(fromfile, tofile string) error
該方法是在 GetFile 的基礎上實現了快速儲存的功能
fromfile 是提交時候的 html 表單中的 name
<form enctype="multipart/form-data" method="post">
<input type="file" name="uploadname" />
<input type="submit">
</form>
儲存的程式碼例子如下:
func (c *FormController) Post() {
f, h, err := c.GetFile("uploadname")
if err != nil {
log.Fatal("getfile err ", err)
}
defer f.Close()
c.SaveToFile("uploadname", "static/upload/" + h.Filename) // 儲存位置在 static/upload, 沒有資料夾要先建立
}
#資料繫結
支援從使用者請求中直接資料 bind 到指定的物件,例如請求地址如下
?id=123&isok=true&ft=1.2&ol[0]=1&ol[1]=2&ul[]=str&ul[]=array&user.Name=astaxie
var id int
this.Ctx.Input.Bind(&id, "id") //id ==123
var isok bool
this.Ctx.Input.Bind(&isok, "isok") //isok ==true
var ft float64
this.Ctx.Input.Bind(&ft, "ft") //ft ==1.2
ol := make([]int, 0, 2)
this.Ctx.Input.Bind(&ol, "ol") //ol ==[1 2]
ul := make([]string, 0, 2)
this.Ctx.Input.Bind(&ul, "ul") //ul ==[str array]
user struct{Name}
this.Ctx.Input.Bind(&user, "user") //user =={Name:"astaxie"}
學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928
清華團隊帶你實戰區塊鏈開發
掃碼獲取海量視訊及原始碼 QQ群:721929980
相關文章
- springmvc處理ajax請求SpringMVC
- DeferredResult——非同步請求處理非同步
- nginx 如何處理一個請求Nginx
- Go Web如何處理Web請求?GoWeb
- yai 請求預處理指令碼AI指令碼
- Netty(二):如何處理io請求?Netty
- Laravel請求處理管道理解Laravel
- 處理 HTTP 請求的註解HTTP
- springmvc原始碼 ---DispatcherServlet 處理請求SpringMVC原始碼Servlet
- 處理請求(AFURLRequestSerialization)和響應(AFURLResponseSerialization)
- 使用cors完成跨域請求處理CORS跨域
- linux如何處理多連線請求?Linux
- SpringBoot 教程之處理非同步請求Spring Boot非同步
- 4、Ktor學習-處理HTTP請求;HTTP
- java webservice 帶請求頭方式處理JavaWeb
- Spring MVC的請求處理邏輯SpringMVC
- SpringBoot可以同時處理多少請求?Spring Boot
- 搜尋 伺服器處理請求伺服器
- options 請求跨域問題處理跨域
- Nacos - 服務端處理心跳請求服務端
- 關於在request請求時,處理請求引數的問題
- 答疑 - SAP OData 框架處理 Metadata 後設資料請求的實現細節框架
- Nginx請求處理流程你瞭解嗎?Nginx
- axios中POST請求變成OPTIONS處理iOS
- Node.js如何處理多個請求?Node.js
- 封裝springmvc處理ajax請求結果封裝SpringMVC
- 前後端處理流檔案請求後端
- Apache Tomcat如何高併發處理請求ApacheTomcat
- Laravel 底層是如何處理HTTP請求LaravelHTTP
- Nacos - 服務端處理註冊請求服務端
- Flask——請求資料Flask
- SpringBoot使用Axios傳送請求,引數處理Spring BootiOS
- Spring MVC框架處理Web請求的基本流程SpringMVC框架Web
- 用Golang處理每分鐘100萬份請求Golang
- ajax呼叫WebMethed返回處理請求時出錯Web
- iOS for 迴圈內網路請求的處理iOS內網
- spring security:ajax請求的session超時處理SpringSession
- SpringMVC請求處理過程原始碼簡析SpringMVC原始碼