不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • GO基础

  • 面向对象

  • 并发编程

  • 常用库

  • 数据库操作

  • Beego框架

    • 01.Beego安装
    • 02.Beego创建项目
    • 03.获取参数传值
      • 01.MVC 简单介绍
      • 02.Beego 中的控制器
        • 2.1 控制器概念
        • 2.2 创建控制器
        • 2.3 配置路由
      • 03.GET获取传值
        • 3.1 get获取传值方法
        • 3.2 演示
      • 04.POST获取传值
        • 4.1 定义控制器
        • 4.2 添加路由
        • 4.3 article.html
      • 05.获取post提交的XMl数据
        • 5.1 配置copyrequestbody
        • 5.2 控制器
        • 5.3 提交Xml数据
    • 04.路由
    • 05.模板基本使用
    • 06.Model封装公共方法
    • 07.Config参数配置
    • 08.Cookie
    • 09.Session
    • 10.日志模块
    • 11.上传文件
    • 12.GORM操作
    • 13.GORM查询
    • 14.GORM 关联查询
    • 15.GORM原生SQL
  • Beego商城

  • GIN框架

  • GIN论坛

  • 微服务

  • 设计模式

  • Go
  • Beego框架
xiaonaiqiang
2021-05-23
目录

03.获取参数传值

# 01.MVC 简单介绍

  • MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写

  • 一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码

  • 将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

  • Beego 是一个 MVC 框架:

    • Model(模型)主要用于处理应用程序的业务逻辑,以及和数据库打交道
    • View(视图) 是应用程序中数据显示的部分。
    • Controller(控制器)控制器作用于模型和视图上
      • 它可以把我们在 Model 模型上面获取的数据显示到 View 视图上面
      • 也可以把 View 传递的数据流向模型对象
      • 它使视图与模型分离开。

# 02.Beego 中的控制器

# 2.1 控制器概念

  • beego 中的控制器本质上是一个结构体,这个结构体里面内嵌了 beego.Controller。

  • 这样的话 我 们 自 定 义 的 控 制 器 就 继 承 了 beego.Controller

  • 继 承 以 后 自 动 拥 有 了 所 有beego.Controller 的属性和方法。

  • Beego 中的路由机制可以控制具体的 URL 请求执行哪个控制器的方法。

  • 通常每个控制器可以定义很多方法。

  • 路由机制是控制哪个控制器接收哪些请求。

  • 而 beego.Controller 拥有很多方法,其中包括 Init、Prepare、Post、Get、Delete、Head 等方法。

  • 我们可以通过重写的方式来实现这些方法,而我们上面的代码就是重写了 Get 方法

# 2.2 创建控制器

  • controllers\goods.go
package controllers

import (
	"github.com/astaxie/beego"
)

type GoodsController struct {
	beego.Controller   // 控制器必须要继承 beego.Controller
}

func (c *GoodsController) Get() {
	c.TplName = "goods.tpl"
}

func (c *GoodsController) AddGoods() {
	c.Ctx.WriteString("增加商品")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 2.3 配置路由

  • routers\router.go
package routers
import (
	"beegodemo02/controllers"
	"github.com/astaxie/beego"
)

func init() {
    beego.Router("/", &controllers.MainController{})
    beego.Router("/goods", &controllers.GoodsController{})
	 beego.Router("/goods/add", &controllers.GoodsController{}, "get:AddGoods")
    // get: 表示控制器的方法
    // addGoods: 表示处理请求的那个控制器
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 03.GET获取传值

# 3.1 get获取传值方法

GetString(key string) string     
GetStrings(key string) []string
GetInt(key string) (int64, error)
GetBool(key string) (bool, error)
GetFloat(key string) (float64, error)
1
2
3
4
5

# 3.2 演示

http://127.0.0.1:8080/goods/add?id=1&name=apple

func (c *GoodsController) AddGoods() {
	// 1.获取 string 类型
	name := c.GetString("name")
	fmt.Printf("%v--->%T",name,name)  // apple--->string

	// 2.获取 int 类型
	id, err := c.GetInt("id")
	if err != nil {
		c.Ctx.WriteString("传入参数错误")
		return
	}
	fmt.Printf("%v--->%T",id,id)  // 1--->int
	c.Ctx.WriteString("增加商品")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 04.POST获取传值

  • Post 接受的参数放在结构体中

  • 如果要把表单里的内容赋值到一个 struct 里,除了用上面的方法一个一个获取再赋值外

  • beego 提供了通过另外一个更便捷的方式

  • 就是通过 struct 的字段名或 tag 与表单字段对应直接解析到 struct

# 4.1 定义控制器

  • controllers/article.go
package controllers

import (
	"fmt"
	"github.com/astaxie/beego"
)

type ArticleController struct {
	beego.Controller   // 控制器必须要继承 beego.Controller
}

// 一:get请求页面
func (c *ArticleController) GetArticle() {
	c.TplName = "article.html"
}

// 二:定义 struct 解析表单结构体
type article struct {  // 通过 struct 的字段名或 tag 与表单字段对 应直接解析到 struct
	Title string `form:"title"`       // 商品名称
	Content string `form:"content"`   // 商品描述
}

// 三:post请求方法
func (c *ArticleController) DoEditArticle() {
	a := article{}
	err := c.ParseForm(&a)
	if err == nil {
		fmt.Println(a.Title)    // 华为Meta 30
		fmt.Println(a.Content)   // 拍照神器
		c.Ctx.WriteString(a.Title + "----" + a.Content)
	}else {
		c.Ctx.WriteString("执行增加")
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 4.2 添加路由

  • routers\router.go
package routers
import (
	"beegodemo02/controllers"
	"github.com/astaxie/beego"
)

func init() {
	beego.Router("/article", &controllers.ArticleController{}, "get:GetArticle")
	beego.Router("/article/doEdit", &controllers.ArticleController{}, "post:DoEditArticle")
}
1
2
3
4
5
6
7
8
9
10

# 4.3 article.html

views\article.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>文章页</h1>
        <form action="/article/doEdit" method="post">
            <p>商品名称:<input type="text" name="title" /></p>
            <p>商品描述:<input type="text" name="content" /></p>
            <p><input type="submit" value="提交"></p>
        </form>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 05.获取post提交的XMl数据

# 5.1 配置copyrequestbody

  • 在配置文件里设置 copyrequestbody = true
  • conf\app.conf
appname = beegodemo02
httpport = 8080
runmode = dev
copyrequestbody = true
1
2
3
4

# 5.2 控制器

package controllers

import (
	"encoding/xml"
	"fmt"
	"github.com/astaxie/beego"
)

type ArticleController struct {
	beego.Controller   // 控制器必须要继承 beego.Controller
}

// 定义 struct 解析表单结构体,用于解析xml数据
type Article struct {
	Title string `xml:"title"`
	Content string `xml:"content"`
}

// 获取PostXML数据
func (c *ArticleController) PostXML() {
	article := Article{}
	var err error
	if err = xml.Unmarshal(c.Ctx.Input.RequestBody, &article); err == nil {
		c.Data["json"] = article
		fmt.Printf("%#v",article)  // {Title:"张三", Content:"我是张三"}
	} else {
		c.Data["json"] = err.Error()
	}
	c.ServeJSON()  // {Title:"张三", Content:"我是张三"}
	// c.Ctx.WriteString("测试xml请求")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  • 添加路由
func init() {
	beego.Router("/xml", &controllers.ArticleController{}, "post:PostXML")
}
1
2
3

# 5.3 提交Xml数据

<?xml version="1.0" encoding="UTF-8"?>
<article>
    <content type="string">我是张三</content>
    <title type="string">张三</title>
</article>
1
2
3
4
5
  • 演示结果

04.Beego 中 Get 、Post、 Put、 Delete 以及获取参数传值 05.Beego 中的动态路由/正则路由 06.路由跳转

上次更新: 2024/3/13 15:35:10
02.Beego创建项目
04.路由

← 02.Beego创建项目 04.路由→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式