一、MVC 简单介绍
Beego 是一个 MVC 框架:
Model(模型)主要用于处理应用程序的业务逻辑,以及和数据库打交道
View(视图) 是应用程序中数据显示的部分。
Controller(控制器)控制器作用于模型和视图上。它可以把我们在 Model 模型上面获取的 数据显示到 View 视图上面,也可以把 View 传递的数据流向模型对象。它使视图与模型分离 开
二、Beego 中的控制器
beego 中的控制器本质上是一个结构体,这个结构体里面内嵌了 beego.Controller。这样的 话 我 们 自 定 义 的 控 制 器 就 继 承 了 beego.Controller , 继 承 以 后 自 动 拥 有 了 所 有 beego.Controller 的属性和方法。
新建一个 article 的控制器,并在控制器里面增加几个方法
package controllers
import ( "github.com/astaxie/beego" )
type ArticleController struct {
beego.Controller
}
func (c *ArticleController) Get() {
c.Data["title"] = "这是文章列表"
c.TplName = "article/index.tpl"
}
func (c *ArticleController) AddArticle() {
c.Ctx.WriteString("增加文章")
}
func (c *ArticleController) EditArticle() {
c.Ctx.WriteString("增加文章")
}
三、Beego 中的固定路由配置
路由机制可以控制哪个控制器接收哪些请求。通俗的讲路由就是当我们在 URL 输入不同的 地址执行不同的请求。
package routers
import (
"beegodemo02/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/article", &controllers.ArticleController{})
beego.Router("/article/add", &controllers.ArticleController{}, "get:AddArticle")
beego.Router("/article/edit", &controllers.ArticleController{}, "get:EditArticle") }
四、Beego 中 Get 、Post、 Put、 Delete 以及获取参数 传值
Beego 中可以使用 c.GetString(“参数”) 来获取 get 或者 post 传递的参数
- GetString(key string) string
- GetStrings(key string) []string
- GetInt(key string) (int64, error)
- GetBool(key string) (bool, error)
- GetFloat(key string) (float64, error)
get
func (c *ArticleController) AddUser() {
c.TplName = "userAdd.html"
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>增加用户</h2>
<form action="/article/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="lable1" name="hobby"/> <label for="lable1">吃饭</label>
<input type="checkbox" value=2 id="lable2" name="hobby"/> <label for="lable2">睡觉</label>
<input type="checkbox" value=3 id="lable3" name="hobby"/> <label for="lable3">敲代码</label>
<input type="submit" value="提交">
</form>
</body>
</html>
配置路由
beego.Router("/article/ToAdd", &controllers.ArticleController{}, "get:AddUser"
beego.Router("/article/doAdd", &controllers.ArticleController{}, "post:DoAddUser")
package controllers
import (
"fmt"
"github.com/astaxie/beego"
"strconv"
)
type ArticleController struct {
beego.Controller
}
func (c *ArticleController) Get() {
p := c.GetString("page")
beego.Info(p)
c.Data["title"] = "这是新闻列表"
c.TplName = "article/index.tpl"
c.Ctx.WriteString("新闻列表") // 直接给我们页面返回数据
}
func (c *ArticleController) AddArticle() {
id := c.GetString("id")
beego.Info(id)
c.Ctx.WriteString("增加新闻--" + id) // 直接给我们页面返回数据
}
func (c *ArticleController) AddUser() {
c.TplName = "userAdd.html"
}
//处理post请求 获取post提交的数据
func (c *ArticleController) 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")
password := c.GetString("password")
hobby := c.GetStrings("hobby")
fmt.Printf("hobby值:%v---hobby类型:%T", hobby, hobby)
c.Ctx.WriteString("用户中心--" + strconv.Itoa(id) + username + password)
}
func (c *ArticleController) EditUser() {
c.TplName = "userEdit.html"
}
// 定义一个User的结构体
type User struct {
Username string `form:"username" json:"username"`
Password string `form:"password" json:"password"`
Hobby []string `form:"hobby" json:"h"`
}
func (c *ArticleController) 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 *ArticleController) GetUser() {
u := User{
Username: "张三",
Password: "123456",
Hobby: []string{"1","2"},
}
// 返回一个json数据
c.Data["json"] = u
c.ServeJSON()
}
package routers
import (
"beegodemo01/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/goods", &controllers.GoodsController{})
beego.Router("/article", &controllers.ArticleController{})
beego.Router("/article/add", &controllers.ArticleController{},"get:AddArticle")
beego.Router("/article/ToAdd", &controllers.ArticleController{}, "get:AddUser")
beego.Router("/article/doAdd", &controllers.ArticleController{}, "post:DoAddUser")
beego.Router("/article/edit", &controllers.ArticleController{}, "get:EditUser")
beego.Router("/article/doEdit", &controllers.ArticleController{}, "post:DoEditUser")
beego.Router("/article/getUser", &controllers.ArticleController{}, "get:GetUser")
}