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 屬性,這兩個值必須對應,否則會解析不到數據。

本篇文章我們只是講解了怎麼從模板獲取到數據,下一章我們將會說明如果把數據顯示到模板上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章