【Beego】(四)Beego路由配置

一、环境安装

1、GO语言环境安装

【Golang】(二)Go语言环境安装_安装golang 环境-CSDN博客

 

2、Beego安装

【Beego】(二)Beego安装-CSDN博客

 

二、Beego路由配置

 

1、固定路由


固定路由也就是全匹配的路由,如下所示:

web.Router("/", &controllers.MainController{})
web.Router("/admin", &admin.UserController{})
web.Router("/admin/index", &admin.ArticleController{})
web.Router("/admin/addpkg", &admin.AddController{})



如上所示的路由就是我们最常用的路由方式,一个固定的路由,一个控制器,然后根据用户请求方法不同请求控制器中对应的方法,典型的 RESTful 方式。

 

2、正则路由


为了用户更加方便的路由设置,beego 参考了 sinatra 的路由实现,支持多种方式的路由:

web.Router(“/api/?:id”, &controllers.RController{})

默认匹配 //例如对于URL"/api/123"可以匹配成功,此时变量":id"值为"123",URL"/api/"可正常匹配

web.Router(“/api/:id”, &controllers.RController{})

默认匹配 //例如对于URL"/api/123"可以匹配成功,此时变量":id"值为"123",但URL"/api/"匹配失败

web.Router(“/api/:id([0-9]+)”, &controllers.RController{})

自定义正则匹配 //例如对于URL"/api/123"可以匹配成功,此时变量":id"值为"123"

web.Router(“/user/:username([\w]+)”, &controllers.RController{})

正则字符串匹配 //例如对于URL"/user/astaxie"可以匹配成功,此时变量":username"值为"astaxie"

web.Router(“/download/.”, &controllers.RController{})

*匹配方式 //例如对于URL"/download/file/api.xml"可以匹配成功,此时变量":path"值为"file/api", “:ext"值为"xml”

web.Router(“/download/ceshi/*”, &controllers.RController{})

*全匹配方式 //例如对于URL"/download/ceshi/file/api.json"可以匹配成功,此时变量":splat"值为"file/api.json"

web.Router(“/:id:int”, &controllers.RController{})

int 类型设置方式,匹配 :id为int 类型,框架帮你实现了正则 ([0-9]+)

web.Router(“/:hi:string”, &controllers.RController{})

string 类型设置方式,匹配 :hi 为 string 类型。框架帮你实现了正则 ([\w]+)

web.Router(“/cms_:id([0-9]+).html”, &controllers.CmsController{})

带有前缀的自定义正则 //匹配 :id 为正则类型。匹配 cms_123.html 这样的 url :id = 123

可以在 Controller 中通过如下方式获取上面的变量:

this.Ctx.Input.Param(":id")
this.Ctx.Input.Param(":username")
this.Ctx.Input.Param(":splat")
this.Ctx.Input.Param(":path")
this.Ctx.Input.Param(":ext")


自定义方法及 RESTful 规则
上面列举的是默认的请求方法名(请求的 method 和函数名一致,例如 GET 请求执行 Get 函数,POST 请求执行 Post 函数),如果用户期望自定义函数名,那么可以使用如下方式:

web.Router("/",&IndexController{},"*:Index")


使用第三个参数,第三个参数就是用来设置对应 method 到函数名,定义如下

*表示任意的 method 都执行该函数
使用 httpmethod:funcname 格式来展示
多个不同的格式使用 ; 分割
多个 method 对应同一个 funcname,method 之间通过 , 来分割
以下是一个 RESTful 的设计示例:

web.Router("/api/food",&RestController{},"get:ListFood")
web.Router("/api/food",&RestController{},"post:CreateFood")
web.Router("/api/food",&RestController{},"put:UpdateFood")
web.Router("/api/food",&RestController{},"delete:DeleteFood")


以下是多个 HTTP Method 指向同一个函数的示例:

web.Router("/api",&RestController{},"get,post:ApiFunc")


以下是不同的 method 对应不同的函数,通过 ; 进行分割的示例:

web.Router("/api/food",&RestController{},"get:ListFood;post:CreateFood;put:UpdateFood;delete:DeleteFood")



可用的 HTTP Method:

*: 包含以下所有的函数
get: GET 请求
post: POST 请求
put: PUT 请求
delete: DELETE 请求
patch: PATCH 请求
options: OPTIONS 请求
head: HEAD 请求
如果同时存在 * 和对应的 HTTP Method,那么优先执行 HTTP Method 的方法,例如同时注册了如下所示的路由:

web.Router("/simple",&SimpleController{},"*:AllFunc;post:PostFunc")

 

3、自动路由

 

自动路由是指,通过反射获取控制器的名字和控制器实现的所有函数名字,自动生成URL路由。使用自动路由,需要用beego.AutoRouter()函数注册控制器。
示例如下:

beego.AutoRouter(&controllers.UserController())

然后可以通过如下形式访问路由:

/user/1ogin //调用UserContro11er中的Login()方法

除前缀两个“/:Controller/:Method”形式的匹配外,对于剩下的URL,Beego会自动将它们解析为参数保存在this.Ctx.Input.Params中。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

forest_long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值