Beego脱坑(五)使用模板获取数据 - Go语言中文社区

Beego脱坑(五)使用模板获取数据



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 属性,这两个值必须对应,否则会解析不到数据。

本篇文章我们只是讲解了怎么从模板获取到数据,下一章我们将会说明如果把数据显示到模板上。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/yang731227/article/details/103007106
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢