`
hnus
  • 浏览: 29053 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

beego中路由(Router)参数和表单(Form)参数的区别和获取

 
阅读更多

在beego中,视图层有两种叫做参数的东西,有时候很让人困惑。它们分别是路由参数表单参数

beego的路由映射支持灵活的结构,比如对于这种/blog/:catName可以表示的是某一个分类下的blog列表,那么这里的:catName就是路由参数;如果说我们要对这个分类下面的blog进行分页,想查看第10页的blog,那么我们的url可能变成了/blog/:catName?page=10这种格式,那么这里的page就是表单参数。表单参数既可以是GET类型的参数也可以是POST类型的参数,总之都叫做表单参数。

1. 获取路由参数的方法

可以使用下面的方法来获取路由参数:

方法 原型
GetInt func (c *Controller) GetInt(key string) (int64, error)
GetBool func (c *Controller) GetBool(key string) (bool, error)
GetFloat func (c *Controller) GetFloat(key string) (float64, error)
GetString func (c *Controller) GetString(key string) string

我们为了演示这些方法构建了一个路径:

beego.Router("/blog/:catId/:catName:/:catPublish:/:catPrice", &controllers.MainController{}, "get:Blog")

然后我们可以用下面的方法获取路径参数:

func (this *MainController) Blog() {
    catId, _ := this.GetInt(":catId")
    catName := this.GetString(":catName")
    catPublish, _ := this.GetBool(":catPublish")
    catPrice, _ := this.GetFloat(":catPrice")
    beego.Debug(fmt.Sprintf("Category Id:%d Name:%s Publish:%v Price:%f", catId, catName, catPublish, catPrice))
}

然后访问http://localhost:8080/blog/30/beego/true/98.45,可以得到下面的输出:

2014/09/02 14:25:04 [D] Category Id:30 Name:beego Publish:true Price:98.450000
2014/09/02 14:25:04 [C] the request url is /blog/30/beego/true/98.45

其实我们可以去看看这些Get方法,比如GetString(github.com/astaxie/beego/controller.go 367行):

func (c *Controller) GetString(key string) string {
    return c.Ctx.Input.Query(key)
}

从上面的代码可以看到实际上这些路径参数都是从c.Ctx.Input里面获取的,而这个参数类型是Context,定义在github.com/astaxie/beego/context/context.go里面。

type Context struct {
    Input          *BeegoInput
    Output         *BeegoOutput
    Request        *http.Request
    ResponseWriter http.ResponseWriter
    _xsrf_token    string
}

然后我们再看看Context里面的Input,这是一个*BeegoInput类型(定义在github.com/astaxie/beego/context/input.go)里面:

type BeegoInput struct {
    CruSession    session.SessionStore
    Params        map[string]string
    Data          map[interface{}]interface{} // store some values in this context when calling context in filter or controller.
    Request       *http.Request
    RequestBody   []byte
    RunController reflect.Type
    RunMethod     string
}

然后我们再看这个结构体的Query方法的定义:

// Query returns input data item string by a given string.
func (input *BeegoInput) Query(key string) string {
    if val := input.Param(key); val != "" {
        return val
    }
    if input.Request.Form == nil {
        input.Request.ParseForm()
    }
    return input.Request.Form.Get(key)
}

我们惊奇地发现这个Query方法并不单纯,它同时支持查询路由参数和表单参数。所以一般情况下你也可以用来查询表单参数。

2. 获取表单参数的方法
上面我们看过了获取路由参数的方法,这里我们再看一下获取表单参数的方法。在上面的获取路由参数的讲解最后,我们发现可以使用和上面相同的方法来获取表单参数。

方法 原型
GetInt func (c *Controller) GetInt(key string) (int64, error)
GetBool func (c *Controller) GetBool(key string) (bool, error)
GetFloat func (c *Controller) GetFloat(key string) (float64, error)
GetString func (c *Controller) GetString(key string) string

验证很简单,使用这样的url:http://localhost:8080/blog/30/beego/true/98.45?page=10和代码:

page, _ := this.GetInt("page")
beego.Debug("Page", page)

输出:

2014/09/02 14:41:07 [D] Page 10

当然除了上面的方法之外,还有两个方法可以用来获取表单参数:

名称 原型 描述
GetStrings func (c *Controller) GetStrings(key string) []string 用来获取比如多选框的值
GetFile func (c *Controller) GetFile(key string) (multipart.File, *multipart.FileHeader, error) 用来获取上传的文件

好了,其实一般情况下,获取路由参数和表单参数不会对用户如此透明,直接用GetXXX方法获取就可以了。

作者jemygraw2014-09-02

http://golanghome.com/post/327

分享到:
评论

相关推荐

    vue获取form表单的值示例

    在开发基于Vue.js的web应用时,经常会需要处理表单提交,以及获取表单中各个输入字段的值。本文档中将分享一个如何在Vue.js中获取form表单值的示例,使用的是Element-ui组件库以及axios库来发送HTTP请求。下面将详细...

    AngularJS 使用 UI Router 实现表单向导

    在使用UI Router实现表单向导时,需要理解几个核心概念:状态(state)、视图(view)和控制器(controller)。状态是指应用中的一种特定情景,它包含一个名称、一个URL、一个模板以及可能还有一个控制器。视图则是状态...

    Golang语言基于beego框架的websocket即时聊天

    在本文中,我们将深入探讨如何使用Golang语言和beego框架构建一个基于Websocket的即时聊天应用程序。beego是一个强大的Go Web开发框架,它提供了一种简洁的方式来快速搭建Web应用,而Websocket则是一种在客户端和...

    Vue中this.$router.push参数获取方法

    由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效。需要用name来指定页面。 及通过路由配置的name属性访问 在路由配置文件中定义参数:   通过name...

    vue.js this.$router.push获取不到params参数问题

    本文将详细讲解如何正确地使用`this.$router.push`传递和获取`params`参数,并分析为何会出现获取不到`params`的情况。 首先,Vue Router提供两种主要的参数传递方式:`query`和`params`。它们在URL表示和使用场景...

    【JavaScript源代码】Vue router传递参数并解决刷新页面参数丢失问题.docx

    在 Vue Router 中,有多种传递参数的方式,包括通过 `params` 和 `query`。这里我们将详细探讨这两种方式以及如何解决刷新页面时参数丢失的问题。 1. **通过 `params` 传递参数** 当我们使用 `params` 传递参数时...

    beego官方开发文档

    使用`beego.Router()`方法可以方便地定义路由规则,同时支持RESTful风格的路由设计。 4. **控制器(Controller)** 控制器是处理HTTP请求的核心组件,beego的控制器继承自`beego.Controller`,开发者可以在控制器中...

    详解vue-router2.0动态路由获取参数

    本文将详细介绍 Vue Router 2.0 中动态路由获取参数的实现方法,以帮助读者更好地理解和掌握 Vue Router 2.0 的动态路由机制。 Vue Router 2.0 动态路由机制 在 Vue Router 2.0 中,动态路由机制允许开发者根据...

    使用注解自动生成Router以及Router相关参数.zip

    - 避免硬编码:确保URL路径和参数可以从模型或其他配置文件动态获取,以保持灵活性。 总的来说,通过注解自动生成Router及相关参数是一种优雅且高效的方式,可以简化iOS和macOS应用的导航逻辑。结合开源库如...

    详解Angular4中路由Router类的跳转navigate

    详解Angular4中路由Router类的跳转navigate Angular4 中路由Router类的跳转navigate是Angular应用程序中非常重要的一部分,掌握了路由跳转的方法可以更加灵活地控制应用程序的导航。下面我们将详细介绍Angular4 ...

    vue-router路由参数刷新消失的问题解决方法

    vue-router路由参数刷新消失的问题解决方法 路由参数刷新消失的问题解决方法是 vue-router 中常见的问题,本篇文章将为您提供四种解决方案。 解决方案一:Session & 服务器渲染 传统的解决方案是使用 Session 和...

    vue router带参数页面刷新或回退参数消失的解决方法

    方法三:使用Vue Router的`beforeEach`或`beforeResolve`全局守卫,在路由跳转前,把参数保存到Vue Router实例中,然后在目标组件中通过路由实例获取参数。 示例代码如下: ```javascript // 全局前置守卫 router....

    beego框架开发参考

    路由在beego中是通过`beego.Router()`函数来配置的。这个函数接受两个参数:一个HTTP方法(GET、POST等)和一个URL模式,然后指定处理该路由的控制器方法。例如,`beego.Router("/hello", &controllers....

    routeros常用命令详解

    ip arp命令用于显示所有RouterOS知道的IP地址和MAC地址的对应列表,例如用户可以输入"ip arp print"以获取IP地址和MAC地址的对应列表。 十一、user active命令 user active命令用于显示所有的RouterOS活动用户,...

    浅谈angular4.0中路由传递参数、获取参数最nice的写法

    Angular 4.0 中路由传递参数、获取参数的 Nice 写法 在 Angular 4.0 中,路由传递参数是非常重要的知识点之一。今天,我们将分享浅谈 Angular 4.0 中路由传递参数、获取参数的 Nice 写法,旨在帮助大家更好地理解和...

    vue-router入门教程和总结1

    查询参数则可以通过 `this.$route.query` 获取。 总的来说,Vue Router 是 Vue.js 应用中管理页面导航的关键组件。它提供了丰富的功能,如路由配置、参数传递、编程式导航等,极大地增强了 Vue.js 应用的灵活性和可...

    beego 环境安装(windows 和 contos)

    ### Beego环境安装详解(Windows 和 CentOS) #### 一、Beego简介 Beego 是一个用 Go 语言编写的高性能 Web 框架,适用于快速开发 RESTful 风格的应用程序。它提供了丰富的功能,如自动代码生成、内置模板引擎、...

    MySQL高可用学习笔记mysqlrouter_MHA.docx

    在配置文件中,我们需要定义日志目录、日志等级、bind 地址和端口、最大连接数等参数。我们还可以定义多个路由规则,例如 failover 和负载均衡规则。 二、MySQL Router 的部署 在部署 MySQL Router 时,我们需要...

    Beego学习笔记对应案例代码

    在"Beego学习笔记对应案例代码"中,我们可以深入理解Beego的核心概念和常用功能。 首先,让我们来看看Beego框架的基础。Beego使用了一个名为`app`的主程序结构,它包含了应用的所有配置和中间件。通过定义路由、...

Global site tag (gtag.js) - Google Analytics