Beego脱坑(四)Controller


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 \*gogocontext.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
}

你可能感兴趣的:(Beego脱坑(四)Controller)