Beego框架 MVC Controller 参数设置、路由设置

下图是Beego MVC框图
在这里插入图片描述

参数设置

beego 目前支持 INI、XML、JSON、YAML 格式的配置文件解析,但是默认采用了 INI 格式解析,用户可以通过简单的配置就可以获得很大的灵活性。

默认配置解析

beego 默认会解析当前应用下的 conf/app.conf 文件
通过这个文件你可以初始化很多 beego 的默认参数:
在这里插入图片描述
它们都维护在结构体 beego/server/web#Config 。

上面这些参数会替换 beego 默认的一些参数, beego 的参数主要有哪些呢?请参考https://godoc.org/github.com/beego/beego#pkg-constants

BConfig 就是 beego 里面的默认的配置,也是结构体 beego/server/web#Config 的实例。

你也可以直接通过web.BConfig.AppName="beepkg"这样来修改,和上面的配置效果一样,只是一个在代码里面写死了,而配置文件就会显得更加灵活。

也可以在配置文件中填写数据库相关信息
在这里插入图片描述
在这里插入图片描述
其余的参数设置,比如API和多配置文件啥的可以看手册

路由设置

beego 存在三种方式的路由:固定路由、正则路由、自动路由

看到路由这里其实我人是有点晕的,不是之前看框图是只有三种路由方式嘛,怎么文档中突然多了基础路由啥的,其实呢Beego用的路由是RESTful Controller 路由

RESTful是什么?
简单来讲RESTful 是一种目前 API 开发中广泛采用的形式,beego 默认就是支持这样的请求方法,也就是用户 Get 请求就执行 Get 方法,Post 请求就执行 Post 方法。因此默认的路由是这样 RESTful 的请求方式。

基础路由是一种请求写个路由,POST请求写个POST路由,就比较麻烦,RESTful是把各种请求的路由变成方法,请求是什么,就调用哪个路由方法

首先认识下项目结构
MVC结构嘛,肯定会有Models,View,Controller,我这没有View,是因为我搞得前后端分离的api
routers就是跟路由相关的东西了
在这里插入图片描述

如何添加路由

前面的都是路径,我箭头指向的哪个就是方法(自己创建的)
在这里插入图片描述
在这里插入图片描述
然后我重写了Get方法,注释没改,注释这里会自动生成代码的,后续会说,那么我这个路由就是让页面输出u.TplName字符串
在这里插入图片描述
在这里插入图片描述

Beego自动生成代码在哪里体现

注意注释!自动生成代码根据注释来的
上面
在这里插入图片描述

固定路由

固定路由也就是全匹配的路由
默认格式:
beego “github.com/beego/beego/v2/server/web”
因为import 的时候beego "github.com/beego/beego/v2/server/web"所以beego就相当于web
在这里插入图片描述

正则路由

正则路由就是能够让我们更灵活的匹配内容,并且减少开发者的代码量

手册中有很多种写法,我拿第一种写法试了下(手册中的双引号是中文 😃)
web.Router("/api/?:id", &controllers.RController{})
默认匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”,URL”/api/“可正常匹配

可以在 Controller 中通过如下方式获取上面的变量:
this.Ctx.Input.Param(":id")

在router.go中加上beego.Router("/api/?:id", &controllers.MyTestController{})
后在Get请求中添加获取id后输出到页面
在这里插入图片描述
效果图:
在这里插入图片描述

自定义方法及 RESTful 规则

上面列举的是默认的请求方法名(请求的 method 和函数名一致,例如 GET 请求执行 Get 函数,POST 请求执行 Post 函数),如果用户期望自定义函数名,那么可以使用如下方式:
web.Router("/",&IndexController{},"*:Index")

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

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

咱先说下我试这个的时候我犯的一个傻逼错误
‘GetHello’ method doesn’t exist in the controller MyTestController
说我没有这个方法,然后我发现方法的接收者是别的结构体…

首先在router中添加beego.Router("/api/food", &controllers.MyTestController{}, “Get:GetHello”)
也就是用户访问127.0.0.1:8080/api/food的时候,如果是Get请求去执行GetHello这个方法
再去Controller中添加这个方法即可
在这里插入图片描述

自动匹配

咱们首先要注册自动路由
beego.AutoRouter(&controllers.MyTestController{})

那么 beego 就会通过反射获取该结构体中所有的实现方法,你就可以通过如下的方式访问到对应的方法中:
/MyTest/GetHello调用 MyTestController 中的 GetHello方法
/MyTest/GetFunc调用 MyTestController 中的 GetFunc方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自动获取后缀名

只能获取html,xml,json
还可以自动
在这里插入图片描述
在这里插入图片描述

注解路由

beego创建项目,router中init就是注解路由,查文档使用就行
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只小阿大:)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值