01

介绍

创建 beego 的控制器,首先要匿名组合 beego.Controller,beego.Controller实现了接口 beego.ControllerInterface,beego.ControllerInterface 定义了许多函数,这样我们创建的控制器就有了所有 beego.Controller 的方法,我们可以重写这些方法实现自己的业务逻辑。

02

控制器方法

beego.Controller 实现了所有 HTTP Method 对应的方法,例如Get(),Post(),Put(),Delete() 等。beego 默认支持 RESTful 请求方式,可以根据用户请求的 HTTP Method 执行对应的方法,用户可以重写这些方法实现自己的业务逻辑。

除了对应 HTTP Method 的方法之外,还有 Prepare() 和 Finish() 。其中,Prepare() 方法会在对应 HTTPMethod 的方法之前执行,用户可以重写 Prepare() 方法,实现一些预处理的业务逻辑;Finash() 方法会在对应 HTTP Method 的方法之后执行,用户可以重写 Finish() 方法,实现一些释放资源的业务逻辑。

Init(ct *context.Context, controllerName, actionName string, app interface{})

方法用于做初始化操作。

beego.ControllerInterface 的全部方法:

限于篇幅,其它一些方法,我们在用到时再介绍。

03

输入数据

接收请求参数:

用户通过 RESTful 请求方式接收数据,包括 Get、Post、Put、Delete 等,beego 可以自动解析这些数据。

除了使用 beego 提供的方法接收请求数据,还可以使用以下方式接收。

form 表单数据解析到 struct:

如果要把表单里的内容赋值到一个 struct 里,除了用上面的方法一个一个获取再赋值外,beego 提供了通过另外一个更便捷的方式,就是通过 struct 的字段名或 tag 与表单字段对应直接解析到 struct。

获取Request Body 里的数据:

在 API 的开发中,我们经常会用到 JSON 或 XML 来作为数据交互的格式,在 beego 中获取Request Body中的JSON数据,需要在配置文件中设置:copyrequestbody=true

文件上传:

Beego 提供了两个很方便的方法来处理文件上传:

  • GetFile(key string) (multipart.File, *multipart.FileHeader, error) 该方法主要用于用户读取表单中的文件名,然后返回相应的信息,用户根据这些变量来处理文件上传:过滤、保存文件等。
  • SaveToFile(fromfile, tofile string) error 该方法是在 GetFile 的基础上实现了快速保存的功能fromfile 是提交时候的 html 表单中的 name

注意事项:

  • form 表单中增加这个属性 enctype="multipart/form-data"
  • 文件上传之后一般是放在系统的内存里面,如果文件的 size 大于设置的缓存内存大小,那么就放在临时文件中,默认的缓存内存是 64M,你可以通过如下来调整这个缓存内存大小: web.MaxMemory = 1<<22 或者在配置文件中通过如下设置: maxmemory = 1<<22
  • beego 的另外一个参数,MaxUploadSize 来限制最大上传文件大小——如果你一次上传多个文件,那么它限制的就是这些所有文件合并在一起的大小。

示例代码:

绑定请求参数到指定对象:

beego 支持从用户请求中直接数据 bind 到指定的对象,例如请求地址如下:

示例代码:

04

输出数据

除了简单的字符串输出之外,我们在开发 RESTful API 接口的时候,一般会使用 JSON 数据,beego 提供了两个方法,分别是

ServeJSON(encoding ...bool) 和 ServeJSONP()

调用 ServeJSON 之后,会设置 content-type 为 application/json,然后同时把数据进行 JSON 序列化输出。

调用 ServeJSONP 之后,会设置 content-type 为 application/javascript,然后同时把数据进行 JSON 序列化,然后根据请求的 callback 参数设置 jsonp 输出。

示例代码:

05

总结