title: Beego脱坑(四)Controller
tags: go,beego
author : Clown95
Controller的内容比较简单,如果阅读过我前面的几篇文章,应该对Controller有了一个基础的了解。Controller作用就是Router把用户的请求分发到Controller,Controller在根据相应的方法进行处理。
现在我们就来看看Controller是怎么写的,控制器只需要匿名组合 beego.Controller
就可以了,并且名字都是以xxxController命名,如下所示:
type xxxController struct {
beego.Controller
}
接着我们来看一个实例:
type HelloController struct {
beego.Controller
}
func (hello * HelloController) Get() {
hello.Ctx.WriteString("hello world")
}
在这是实例中,我们创建了一个名为 HelloController 的控制器,并且重写了beego.Controller 的Get方法,通过Get方法向浏览器输出 hello world 。
通过 type ControllerInterface interface ,我们可以知道 Get只是 beego.Controller 方法的其中之一,它还包括包括 Init、Prepare、Post、Get、Delete、Head 等方法。
beego 是一个 RESTful 的框架,所以我们的请求默认是执行对应 req.Method
的方法。例如浏览器的是 GET
请求,那么默认就会执行 HelloController 下的 Get
方法。
type ControllerInterface interface {
Init(ct *context.Context, controllerName, actionName string, app interface{})
/*
主要用来初始化Context、 Controller 名称,模板名,初始化模板参数的容器 Data, app 可以用来执行子类的方法
*/
Prepare()
/*
这个函数主要是为了用户扩展用的,这个函数会在下面定义的这些 Method 方法之前执行,用户可以重写这个函数实现类似用户验证之类。
*/
Get()//如果用户请求的 HTTP Method 是 GET,那么就执行该函数
Post()//如果用户请求的 HTTP Method 是 POST,那么就执行该函数
Delete()// 如果用户请求的 HTTP Method 是 DELETE,那么就执行该函数
Put()//如果用户请求的 HTTP Method 是 PUT,那么就执行该函数
Head()//如果用户请求的 HTTP Method 是 HEAD,那么就执行该函数
Patch()//如果用户请求的 HTTP Method 是 PATCH,那么就执行该函数
Options()//如果用户请求的HTTP Method是OPTIONS,那么就执行该函数
Finish()
/*
这个函数是在执行完相应的 HTTP Method 方法之后执行的,默认是空,用户可以在子 struct 中重写这个函数,执行例如数据库关闭,清理数据之类的工作。
*/
Render() error
//这个函数主要用来实现渲染模板,如果 beego.AutoRender 为 true 的情况下才会执行。
XSRFToken() string
CheckXSRFCookie() bool
HandlerFunc(fn string) bool
URLMapping()
}
如果你还看过 Controller的结构体,那么你应该能够清楚的看到它一共有5大块:
1.上下文数据
2.路由控制信息
3.模板(View)数据
4.跨站域请求伪造 数据
5.Session
上下文数据其实我们一直在使用, Ctx *context.Context 就是上下文数据中的内容,至于其他部分我们留在以后再说。
type Controller struct {
// context data
Ctx *context.Context
Data map[interface{}]interface{}
// route controller info
controllerName string
actionName string
methodMapping map[string]func() //method:routertree
AppController interface{}
// template data
TplName string
ViewPath string
Layout string
LayoutSections map[string]string // the key is the section name and the value is the template name
TplPrefix string
TplExt string
EnableRender bool
// xsrf data
_xsrfToken string
XSRFExpire int
EnableXSRF bool
// session
CruSession session.Store
}