title: Beego脫坑(五)使用模板獲取數據
tags: go,beego
author : Clown95
在Controller 那批文章中,我們提到過 Controller有五大部分,其中一個部分就是模板,接下來我們就來完成一個簡單的表單頁面,並進行交互。
獲取參數
當用戶進行註冊的時候,需要提交不同的數據類型,beego 爲我們提供了一些方法,它會會自動解析這些數據。
- GetString(key string) string //獲取字符串類型
- GetStrings(key string) []string //獲取字符串數組
- GetInt(key string) (int64, error) //獲取整型數據
- GetBool(key string) (bool, error) // 獲取布爾型數據
- GetFloat(key string) (float64, error) //獲取浮點型數據
現在我們來進行一些演示:
package controllers
import (
"fmt"
"github.com/astaxie/beego"
"strconv"
)
type Demo1Controller struct {
beego.Controller
}
func (this *Demo1Controller) Get(){
name:=this.GetString("name")
nametype:= fmt.Sprintf("%T", name)
this.Ctx.WriteString("name:" + name +" type:"+nametype +"\n")
age,err:= this.GetInt("age")
if err!=nil{
this.Ctx.WriteString("age傳遞過來的值無法轉換成int" )
}
agetype:= fmt.Sprintf("%T", age)
this.Ctx.WriteString("age:"+ strconv.Itoa(age) +" type:"+agetype+"\n")
}
註冊路由
beego.Router("/demo1",&controllers.Demo1Controller{})
我們使用curl命令執行看看
curl -XGET "http://127.0.0.1:8080/demo1?name=clown&age=18"
curl -XGET "http://127.0.0.1:8080/demo1?name=clown&age=18i"
通過運行結果,可以看到,GetString 自動幫我們把name參數解析成string類型。
GetInt 自動幫我們把age參數解析成int類型,但是如果我們傳入的age的值是非法的,它並不能解析。
還有幾個其他的函數,使用方法都大同小異,這裏不在多說。
表單頁面
現在我們來完成一個註冊表單的頁面,通過表單來提交POST請求,並且通過GET打印
首先我們在view下新建一個register.tpl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>歡迎註冊</title></head>
<body>
<form action="/register" method="post">
<table>
<tbody>
<tr>
<td>用戶名</td>
<td>
<input type="text" name="user" value=""></td>
</tr>
<tr>
<td>密碼</td>
<td>
<input type="password" name="pwd" value=""></td>
</tr>
<tr>
<td>郵箱</td>
<td>
<input type="text" name="email" value=""></td>
</tr>
<tr>
<td>
<input type="submit" value="確認"></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
action="/register" method=“post” 我們可以看到表單指向了register地址,提交方法爲post 。
所以接下來我們在Controllers目錄下新建register.go文件
package controllers
import "github.com/astaxie/beego"
type LoginController struct {
beego.Controller
}
//使用Get方法
func (this * LoginController) Get(){
this.TplName ="register.tpl" //解析register模板
}
//使用Post方法
func (this *LoginController) Post(){
user:=this.GetString("user")
pwd:= this.GetString("pwd")
email :=this.GetString("email")
this.Ctx.WriteString("user="+user+" pwd="+pwd + " email=" +email +"\n")
}
然後註冊路由
beego.Router("/register",&controllers.LoginController{},"Get:Get;Post:Post")
現在我們來運行看看
得到結果
this.TplName ="register.tpl" //解析register模板
可以看到我們使用的 Get 方法解析了 register.tpl 模板,我們需要使用模只要用TplName指定模板即可,默認是獲取View路徑中的模板。
然後對比下面兩段代碼
<input type="text" name="user" value="">
<input type="password" name="pwd" value="">
<input type="text" name="email" value="">
user:=this.GetString("user")
pwd:= this.GetString("pwd")
email:= this.GetString("email")
可以看到 GetString 解析的是 input中 name 屬性,這兩個值必須對應,否則會解析不到數據。
本篇文章我們只是講解了怎麼從模板獲取到數據,下一章我們將會說明如果把數據顯示到模板上。