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 属性,这两个值必须对应,否则会解析不到数据。
本篇文章我们只是讲解了怎么从模板获取到数据,下一章我们将会说明如果把数据显示到模板上。