一、Get
article.go 里添加代码:
package controllers
import (
"fmt"
"github.com/astaxie/beego"
)
type ArticleController struct { // 首字母要大写
beego.Controller
}
func (c *ArticleController) Get() {
c.Ctx.WriteString("新闻列表") // 直接给页面返回数据
}
func (c *ArticleController) AddArticle() {
c.Ctx.WriteString("增加新闻")
}
func (c *ArticleController) EditArticle() {
//获取 get 传值
id := c.GetString("id")
fmt.Printf("值:%v 类型:%T", id, id)
beego.Info(id)
c.Ctx.WriteString("修改新闻" + id)
}
展示如下:
通过 err
判断,获取 get 传值:
package controllers
import (
"fmt"
"github.com/astaxie/beego"
)
type ArticleController struct { // 首字母要大写
beego.Controller
}
func (c *ArticleController) Get() {
c.Ctx.WriteString("新闻列表") // 直接给页面返回数据
}
func (c *ArticleController) AddArticle() {
c.Ctx.WriteString("增加新闻")
}
func (c *ArticleController) EditArticle() { // 方法名称首字母必须大写
////获取 get 传值
//id := c.GetString("id")
//fmt.Printf("值:%v 类型:%T", id, id)
//beego.Info(id)
//c.Ctx.WriteString("修改新闻" + id)
id, err := c.GetInt("id")
if err!=nil{
beego.Info(err)
c.Ctx.WriteString("传入参数错误")
return
}
fmt.Printf("值:%v 类型:%T", id, id)
c.Ctx.WriteString("修改新闻")
}
显示
传入参数错误:
二、Post
user.go:
package controllers
import (
"fmt"
"github.com/astaxie/beego"
"strconv"
)
type UserController struct { // 首字母要大写
beego.Controller
}
func (c *UserController) Get() {
c.Ctx.WriteString("用户中心")
}
func (c *UserController) AddUser() {
c.TplName = "user.html"
}
// 处理 post 请求 获取 post 提交的数据
func (c *UserController) DoAddUser() {
id, err := c.GetInt("id")
if err != nil {
c.Ctx.WriteString("id 必须是 int 类型")
return
}
fmt.Printf("%v---%T", id, id)
username := c.GetString("username") // 这里的 name 要和 html 中的 name 对应
password := c.GetString("password")
hobby := c.GetStrings("hobby")
fmt.Printf("值: %v---类型: %T", hobby, hobby)
c.Ctx.WriteString("用户中心--" + strconv.Itoa(id) + username + password)
}
user.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/user/doAdd" method="post">
ID <input type="text" name="id" /> <br><br>
用户名 <input type="text" name="username" /> <br><br>
密 码 <input type="password" name="password" /> <br><br>
爱 好 <input type="checkbox" value=1 id="label1" name="hobby"/> <label for="label1">吃饭</label>
<input type="checkbox" value=2 id="label2" name="hobby"/> <label for="label2">睡觉</label>
<input type="checkbox" value=3 id="label3" name="hobby"/> <label for="label3">敲代码</label>
<input type="submit" value="提交">
</form>
</body>
</html>
router.go:
package routers
import (
"beegodemo/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/goods", &controllers.GoodsController{}) // 结构体地址
beego.Router("/article", &controllers.ArticleController{}) // 访问 Get 方法
beego.Router("/article/add", &controllers.ArticleController{}, "get:AddArticle") // 访问自定义方法
beego.Router("/article/edit", &controllers.ArticleController{}, "get:EditArticle") // 结构体地址
beego.Router("/user", &controllers.UserController{})
beego.Router("/user/add", &controllers.UserController{}, "get:AddUser") // 结构体地址
beego.Router("/user/doAdd", &controllers.UserController{}, "post:DoAddUser")
}
显示效果:
输入ID、用户名和密码,勾选爱好:
然后点击提交,会通过 post 请求处理数据:
然后在控制台可以看到输出信息:
1. 使用 ParseForm
在 user.go 中增加了一个 User 结构体:
package controllers
import (
"fmt"
"github.com/astaxie/beego"
"strconv"
)
type UserController struct { // 首字母要大写
beego.Controller
}
func (c *UserController) Get() {
c.Ctx.WriteString("用户中心")
}
func (c *UserController) AddUser() {
c.TplName = "userAdd.html"
}
// 处理 post 请求 获取 post 提交的数据
func (c *UserController) DoAddUser() {
id, err := c.GetInt("id")
if err != nil {
c.Ctx.WriteString("id 必须是 int 类型")
return
}
fmt.Printf("%v---%T", id, id)
username := c.GetString("username") // 这里的 name 要和 html 中的 name 对应
password := c.GetString("password")
hobby := c.GetStrings("hobby")
fmt.Printf("值: %v---类型: %T", hobby, hobby)
c.Ctx.WriteString("用户中心--" + strconv.Itoa(id) + username + password)
}
func (c *UserController) EditUser() {
c.TplName = "userEdit.html"
}
// 定义一个 User 的结构体
type User struct {
Username string `form:"username"` // html 中 name 是小写,所以这里需要使用 `` 来定义 tag 标签
Password string `form:"password"`
Hobby []string `form:"hobby"`
}
func (c *UserController) DoEditUser() {
u := User{}
if err := c.ParseForm(&u); err != nil {
c.Ctx.WriteString("post 提交失败")
return
}
fmt.Printf("%#v", u)
c.Ctx.WriteString("解析 post 数据成功")
}
userEdit.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>编辑用户</h2>
<form action="/user/doEdit" method="post">
用户名 <input type="text" name="username" /> <br><br>
密 码 <input type="password" name="password" /> <br><br>
爱 好 <input type="checkbox" value=1 id="label1" name="hobby"/> <label for="label1">吃饭</label>
<input type="checkbox" value=2 id="label2" name="hobby"/> <label for="label2">睡觉</label>
<input type="checkbox" value=3 id="label3" name="hobby"/> <label for="label3">敲代码</label>
<input type="submit" value="提交">
</form>
</body>
</html>
router.go:
package routers
import (
"beegodemo/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/goods", &controllers.GoodsController{}) // 结构体地址
beego.Router("/article", &controllers.ArticleController{}) // 访问 Get 方法
beego.Router("/article/add", &controllers.ArticleController{}, "get:AddArticle") // 访问自定义方法
beego.Router("/article/edit", &controllers.ArticleController{}, "get:EditArticle") // 结构体地址
beego.Router("/user", &controllers.UserController{})
beego.Router("/user/add", &controllers.UserController{}, "get:AddUser") // 结构体地址
beego.Router("/user/doAdd", &controllers.UserController{}, "post:DoAddUser")
beego.Router("/user/edit", &controllers.UserController{}, "get:EditUser") // 结构体地址
beego.Router("/user/doEdit", &controllers.UserController{}, "post:DoEditUser")
}
显示:
输入用户名和密码,勾选爱好:
然后点击提交,会通过 post 请求处理数据:
然后在控制台可以看到输出信息:
2. 返回 json 数据
在 user.go 中增加 GetUser 函数:
package controllers
import (
"fmt"
"github.com/astaxie/beego"
"strconv"
)
type UserController struct { // 首字母要大写
beego.Controller
}
func (c *UserController) Get() {
c.Ctx.WriteString("用户中心")
}
func (c *UserController) AddUser() {
c.TplName = "userAdd.html"
}
// 处理 post 请求 获取 post 提交的数据
func (c *UserController) DoAddUser() {
id, err := c.GetInt("id")
if err != nil {
c.Ctx.WriteString("id 必须是 int 类型")
return
}
fmt.Printf("%v---%T", id, id)
username := c.GetString("username") // 这里的 name 要和 html 中的 name 对应
password := c.GetString("password")
hobby := c.GetStrings("hobby")
fmt.Printf("值: %v---类型: %T", hobby, hobby)
c.Ctx.WriteString("用户中心--" + strconv.Itoa(id) + username + password)
}
func (c *UserController) EditUser() {
c.TplName = "userEdit.html"
}
// 定义一个 User 的结构体
type User struct {
Username string `form:"username"` // html 中 name 是小写,所以这里需要使用 `` 来定义 tag 标签
Password string `form:"password"`
Hobby []string `form:"hobby"`
}
func (c *UserController) DoEditUser() {
u := User{}
if err := c.ParseForm(&u); err != nil {
c.Ctx.WriteString("post 提交失败")
return
}
fmt.Printf("%#v", u)
c.Ctx.WriteString("解析 post 数据成功")
}
// 在 beego 中,如果我们需要返回一个 json 数据,需要把数据放在结构体中
func (c *UserController) GetUser () {
u := User{
Username: "张三",
Password: "123456",
Hobby: []string{"1", "2"},
}
// 返回一个 json 数据
c.Data["json"] = u
c.ServeJSON()
}
router.go:
package routers
import (
"beegodemo/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/goods", &controllers.GoodsController{}) // 结构体地址
beego.Router("/article", &controllers.ArticleController{}) // 访问 Get 方法
beego.Router("/article/add", &controllers.ArticleController{}, "get:AddArticle") // 访问自定义方法
beego.Router("/article/edit", &controllers.ArticleController{}, "get:EditArticle") // 结构体地址
beego.Router("/user", &controllers.UserController{})
beego.Router("/user/add", &controllers.UserController{}, "get:AddUser") // 结构体地址
beego.Router("/user/doAdd", &controllers.UserController{}, "post:DoAddUser")
beego.Router("/user/edit", &controllers.UserController{}, "get:EditUser") // 结构体地址
beego.Router("/user/doEdit", &controllers.UserController{}, "post:DoEditUser")
beego.Router("/user/getUser", &controllers.UserController{}, "get:GetUser") // 首字母大写
}
在浏览器输入 http://localhost:8080/user/getUser
,可以看到:
三、参考教程
有疑问加站长微信联系(非本文作者)