02_Beego控制器、路由、Get、Post、路由跳转

一、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 传递的参数

  1. GetString(key string) string
  2. GetStrings(key string) []string
  3. GetInt(key string) (int64, error)
  4. GetBool(key string) (bool, error)
  5. 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")
}


在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值