Go Web基础--Beego框架

Beego 安装

go get github.com/beego/bee#Beego工具Bee go get github.com/astaxie/beego#Beego框架

创建应用 bee new projectName 特别注意,工程只能创建在gopath目录下
启动应用 bee run 启动,默认8080端口
beego基础路由 1.函数级别路由如下
beego.Get/Post/Put/Head/Options/Delete/Any(router, beego.FilterFunc)

2.Controller
beego.Router(router, controller)
type OjectController struct { beego.Controller }func (this *ObjectController) Get() { obs := models.GetAll() this.Data["json"] = obs this.ServeJson() }beego.Router("/object", &ObjectController{})

3.变量路由、正则路由
url参数可以从ctx.Input.Param读取
## 可以匹配request/value,:id为value值,value可为空。如果要value不为空,id后增加!(感叹号即可);可在括号后增加自定义正则表达式 beego.Router("request/:id", &controllers.RController{}) beego.Router("request/:id([0-9]+)", &controllers.RController{})## beego特殊匹配,可以匹配request/value1/.../valueN,参数在变量:all中 beego.Router("request/:all", &controllers.RController{})## beego特殊匹配,可以匹配request/value1/.../valueN.format,value1/.../valueN在变量path中,format在变量:ext中 beego.Router("request/*.*", &controllers.RController{})## beego特殊匹配,可以匹配request/value1/.../valueN,参数值在变量:splat中 beego.Router("request/*", &controllers.RController{})## beego特殊匹配,强制:id为int类型,还支持string beego.Router("request/:id:int", &controllers.RController{})## beego特殊匹配,支持参数前后还有字符串常量 beego.Router("request/cms_:id([0-9]+).html", &controllers.RController{})

4.映射路由
即在某一路由规则的基础上按照某些条件额外将路由映射到当前Controller的其他方法
# 都好间隔多个HTTP请求类型,冒号后跟随方法名称,分号分隔多个规则 beego.Router("/api/interface", &RestController{}, "post,get:ExtraFuncName; put,delete:ExtraFuncName2; *:ExtraFuncName3")

5.自动化路由
beego自动路由会通过反射根据controller名字、方法名字自动路由,参数也会自动解析
# 假设ObjectController内有login方法,那么/object/login请求会自动被路由至该方法。同时/object/login/param1/param2/param3参数会被自动解析 beego.AutoRouter(&controllers.ObjectController{})

  1. 命名空间路由
    树状,便于管理维护,且支持嵌套
beego.NewNameSpace("/v1").Filter("before", auth) .Get("/notAllowed", func).Router("/test", func)

接口详解
NewNamespace(prefix string) // 返回ns对象
Cond(cond namespaceCond) // 满足条件才能被ns接纳
Filter(action string, filter FilterFunc) // action支持before、after,指在逻辑开始前、开始后进行过滤
参数配置
  1. AppName
    默认是beego,new应用时指定
  2. AppPath
    当前应用路径
  3. AppConfigPath
    配置文件所在路径,默认是 AppPath下的conf/app.conf
  4. EnableHttpListen
    是否启用HTTP监听,默认是true
  5. HttpAddr
    应用监听地址,默认为空,监听所有网卡IP
  6. HttpPort
    应用监听端口,默认8080
  7. 【Go Web基础--Beego框架】RnableHttpTLS
    是否启用https端口,默认关闭
  8. HttpsPort
    应用监听https端口,默认10443
  9. HttpCertFile
    开启https之后,证书的路径
  10. HttpKeyFile
    keyfile路径
  11. HttpServerTimeOut
    http超时时间,默认0,永不超时
  12. RunMode
    默认dev,出错会有有好的出错页面
  13. AutoRender
    默认true,开启模板自动渲染。对于纯后台应用,应设置为false
  14. RecoverPanic
    默认为true。应用异常panic时,会recover,不会导致进程退出
  15. ViewsPath
    模板路径,默认views
  16. SessionOn
    默认false,是否开启session
  17. SessionProvider
    session引擎,默认memory,还支持file、cookie、redis、mysql。。。
  18. SessionName
    客户端cookie名称,默认值beegosessionID
  19. SessionGCMaxLifetime
    默认3600s超时
  20. SessionSavePath
    file就是路径,redis、mysql就是链接地址
  21. SessionHashFunc
    sessionID生成函数,默认sha1
  22. SessionHashKey
    session hash的key
  23. SessionCookieLifeTime
    session默认存在客户端cookie的时间,默认3600s
  24. UseFcgi
    是否启用fastcgi,默认false
  25. MaxMemory
    文件删除哦人内存缓存大小,默认值 64M
  26. EnableGzip
    默认false
  27. DirectoryIndex
    是否开启静态目录的列表显示,默认不显示
  28. BeegoServerName
    beego server name,默认beego
  29. EnableAdmin
    是否开启内存监控模块,默认关闭
  30. AdminHttpAddr
    默认监控模块地址,默认localhost
  31. AdminHttpPort
    监控程序端口,默认8088
  32. TemplateLeft、TemplateRight
    默认{{、}}
  33. ErrorsShow
    是否显示错误信息,默认显示
  34. StaticDir
    静态路径,默认static
自定义配置
conf/app.conf中可以增加自定义的section与配置
[custom]
test = abc
在代码中
beego.AppConfig.String(“custom::test”)
控制器 控制器接口
type ControllerInterface interface { Init(ct *context.Context, controllerName, actionName string, app interface{}) Prepare() Get() Post() Delete() Put() Head() Patch() Options() Finish() Render() error XsrfToken() string CheckXsrfCookie() bool }

控制器执行逻辑
  1. 匹配路由
  2. 执行 func init (不建议复写)
  3. 执行 func Prepare,执行用户自定义初始化
  4. 执行Action函数(Get、Post等,未实现默认返回403 )
  5. 执行 func Render,渲染模板(受Render开关控制)
  6. 执行 func Finish,执行用户自定义结束逻辑
  7. 结束
请求数据处理
主要适用于form形式的数据处理
* GetString(key string) string
* GetStrings(key string) []string
* GetInt(key string) (int64, error)
* GetBool(key string) (bool, error)
* GetFloat(key string) (float64, error)
请求数据RequestBody
RequestBody默认会格式化为form形式,若需要获取requestbody中的json或者xml形式数据,需要配置copyrequestbody = true
文件上传处理
// 从form中获取名为key值的文件信息 GetFile(key string) (multipart.File, *multipart.FileHeader, error)// 将form中名为key值的文件信息存储到tofile中 SaveToFile(fromfile, tofile string) error

Session控制
默认Session引擎为memory,如果使用第三方依赖的引擎,需要额外引入,因为beego目前设计是微内核
SetSession(name string, value interface{}) GetSession(name string) interface{} DelSession(name string) SessionRegenerateID() DestroySession()

数据输出
ServeJson() ServeXml() ServeJsonp() ServeFormatted()

beego模板 beego.Controller 中的成员
TplName string 代表模板文件名称,默认在views目录下
Data map[string] interface{} 代表模板中模板数据
模板数据用法
  1. 模板中读取元数据信息默认使用双括号,{{.MetaParamName}}
  2. 关键字
// 条件判断 {{if .condition}} {{else}} {{end}}// 类似js with使用 {{with .object}} {{.member}} {{end}}// range读取切片或者数组 {{range .slice}} {{.}} {{end}}

模板变量用法
// 先创建并给一个模板变量赋值,然后打印 {{$tplVar := .DataInTpl}} {{$tplVar}}

模板函数
用于简易数据处理,不需要再次额外交互后端服务器。go有部分内置,beego在此基础上又添加了一些,用户也可以自行注册
实例:
{{str2html .htmlInStr}}

管道
将htmlInStr的值传给下一个函数作为参数
{{.htmlInStr | htmlquote}}
模板嵌套
  1. 定义子模版
{{define "tplName"}} template content {{end}}

  1. 引用模板
{{template "tplName"}}

    推荐阅读