Beego学习(一)配置和路由

大兔子大兔子 提交于 2020-01-23 22:29:49


下载地址

//获取beego包
go get github.com/astaxie/beego
//下载工具包,工具包相关命令 只在%GOPATH%/src 目录下有效
go get github.com/beego/bee

基本用法

//新建web工程  bee new <项目名>
//新建api工程 bee api <项目名>
//启动工程 bee run <项目路径名>
//浏览器访问 http://127.0.0.1:8080/  就可以看到beego的默认界面

一、参数配置

系统参数

beego默认读取项目目录下的 conf/app.conf 文件
实际使用只要配置需要的的参数,在代码中也是可以修改的。
下面列出所有的系统参数和解释

#-----------------------------app 配置-----------------------------
AppName = ApiService
#运行模式dev  test  prod
RunMode = dev
#路由忽略大小写匹配,默认为true
RouterCaseSensitive = true
#服务器默认在请求的时候输出 server 为 ApiService
ServerName = ApiService
#是否异常恢复,默认值为 true
RecoverPanic = true
#是否允许在 HTTP 请求时,返回原始请求体数据字节,默认为 true
CopyRequestBody = true
# 是否开启 gzip 支持,默认为 false 不支持 gzip,一旦开启了 gzip,那么在模板输出的内容会进行 gzip 或者 zlib 压缩,根据用户的 Accept-Encoding 来判断。web项目应该设置为true
#压缩级别, gzipCompressLevel = 9,取值为 1~9,默认为 1(最快压缩)
#压缩长度阈值, gzipMinLength = 256,当原始内容长度大于此阈值时才开启压缩,默认为 20B(ngnix默认长度)
#请求类型, includedMethods = get;post,针对哪些请求类型进行压缩,默认只针对 GET 请求压缩
EnableGzip = false
#文件上传默认内存缓存大小,默认值是 1 << 26(64M)
MaxMemory = 1 << 26
#是否显示系统错误信息,默认为 true。
EnableErrorsShow = true
# 是否将错误信息进行渲染,默认值为 true,
EnableErrorsRender = false

#-------------------Web配置---------------------------------
#是否模板自动渲染,默认值为 true
AutoRender = false
#是否开启文档内置功能,默认是 false,API配合swagger时,设置为true。
EnableDocs = true
# Flash数据设置时 Cookie 的名称,默认是 API_FLASH
FlashName = API_FLASH
#Flash 数据的分隔符,默认是 APIFLASH
FlashSeperator = APIFLASH
#是否开启静态目录的列表显示,默认不显示目录,返回 403 错误。配合swagger需要设置为true。
DirectoryIndex = true
#静态文件目录设置,默认是static。可配置单个或多个目录:
#单个目录, StaticDir = download. 相当于 beego.SetStaticPath("/download","download")
#多个目录, StaticDir = download:down download2:down2. 相当于 beego.SetStaticPath("/download","down") 和 beego.SetStaticPath("/download2","down2")
StaticDir = swagger
#允许哪些后缀名的静态文件进行 gzip 压缩,默认支持 .css 和 .js
StaticExtensionsToGzip = .css, .js
# 模板左标签,默认值是{{。
TemplateLeft = {{
#模板右标签,默认值是}}。
TemplateRight = }}
#模板路径,默认值是 views。
ViewsPath = views
#是否开启 XSRF,默认为 false,不开启。XSRF全称是 cross-site request forgery(跨站点请求伪造),也称为CSRF,是一种常见的web攻击方式。
EnableXSRF = false
#XSRF 的 key 信息,默认值是 beegoxsrf。 EnableXSRF=true 才有效
XSRFKEY = beegoxsrf
#XSRF 过期时间,默认值是 0,不过期。
XSRFExpire = 0
#----------------------listener配置-----------------------
#是否开启热升级,默认是 false,关闭热升级
Graceful = false
#设置 HTTP 的超时时间,默认是 0,不超时。
ServerTimeOut = 30
#监听本地网络地址类型,默认为 “tcp4”,该值可以是 “tcp”, “tcp4”, “tcp6”, “unix” or “unixpacket” 之一。
ListenTCP4 = tcp4
#是否启用 HTTP 监听,默认是 true。
EnableHTTP = true
# 应用监听地址,默认为空,监听所有的网卡 IP。
HTTPAddr =
HTTPPort = 8080
#是否启用 HTTPS,默认是 false 关闭。当需要启用时,先设置 EnableHTTPS = true,并设置 HTTPSCertFile 和 HTTPSKeyFile
EnableHTTPS = false
HTTPSAddr =
HTTPSPort = 10443
HTTPSCertFile = conf/ssl.crt
HTTPSKeyFile= conf/ssl.key
#是否开启进程内监控模块,默认 false 关闭。
EnableAdmin = true
# 监控程序监听的地址,默认值是 localhost 。
AdminAddr = localhost
#监控程序监听的地址,默认值是 8088 。
AdminPort = 8088
#是否启用 fastcgi , 默认是 false。
EnableFcgi = false
#通过fastcgi 标准I/O,启用 fastcgi 后才生效,默认 false。
EnableStdIo = false
#----------------------Session配置-------------
SessionOn = false
# session 的引擎,默认是 memory
SessionProvider =
#存在客户端的 cookie 名称,默认值是 beegosessionID。
SessionName = beegosessionID
#session 过期时间,默认值是 3600 秒。
SessionGCMaxLifetime = 3600
#配置信息,根据不同的引擎设置不同的配置信息
SessionCookieLifeTime = 3600
#是否开启SetCookie, 默认值 true 开启。
SessionAutoSetCookie = true
#session cookie 存储域名, 默认空。
SessionDomain =

关于Log配置:

  • AccessLogs 是否输出日志到 Log,默认在 prod 模式下不会输出日志,默认为 false 不输出日志。此参数不支持配置文件配置。
beego.BConfig.Log.AccessLogs = false
  • FileLineNum 是否在日志里面显示文件名和输出日志行号,默认 true。此参数不支持配置文件配置。
beego.BConfig.Log.FileLineNum = true
  • Outputs 日志输出配置,参考 logs 模块,console file 等配置,此参数不支持配置文件配置。
beego.BConfig.Log.Outputs = map[string]string{"console": ""}
beego.BConfig.Log.Outputs["console"] = ""

其他参数

除了上面的系统参数,还可以配置其他参数,如mysql

mysqladdr = “127.0.0.1”
mysqlport = 3306
mysqluser = 
mysqlpassword = 

环境配置

除了上面的配置外,我们还能够将配置分开,主要是根据不同的运行模式,如下

appname = WEB
runmode = dev

[dev]
httpport = 8001
[test]
httpport = 8002
[prod]
httpport = 8003
//分开配置后,取值如下
beego.AppConfig.String("dev::mysqluser")

二、路由

直接请求式

	beego.Get("/test", func(ctx *context.Context) {
		ctx.WriteString("hello world")
	})

结构体添加

这个结构体必须匿名继承beego.Controller

type MainController struct {
	beego.Controller
}

再用Router方法添加进去。
如果后面没有第三个参数那么 默认执行这个结构的对应方法,
先执行 Prepare()方法 再执行Get() Post()等方法 最后执行Finish方法。

beego.Router("/", &controllers.MainController{},"*:function")
// * 表示 methon  function 表示方法名,如下

//任何/test请求都执行 index方法
beego.Router("/test", &controllers.MainController{},"*:index")

//只有get,post请求执行index方法
beego.Router("/test", &controllers.MainController{},"get,post:index")

//get请求执行getfunc   post请求执行postfunc
beego.Router("/test", &controllers.MainController{},"get:getfunc;post:postfunc")

RESTful风格路由

beego支持正则表达
正则文章参考:https://blog.csdn.net/qq_25490573/article/details/103211490

//通过param方法获取参数,如下
ctx.Input.Param(":id") 

//如下 匹配/api/wd 此时 :id = wd  加?匹配/api/
beego.Router(/api/?:id”, &controllers.RController{})

//也可以这样,id此时必须是int值
beego.Router(/:id:int, &controllers.RController{})

//例如对于URL”/download/file/api.xml”可以匹配成功,此时变量”:path”值为”file/api”, “:ext”值为”xml”
beego.Router(/download/., &controllers.RController{})

//*全匹配方式 //例如对于URL”/download/ceshi/file/api.json”可以匹配成功,此时变量”:splat”值为”file/api.json”
beego.Router(/download/ceshi/*, &controllers.RController{})

//还可以  匹配固定的 cms_123.html 格式的
beego.Router(/cms_:id([0-9]+).html”, &controllers.CmsController{})

当然,还有类似于Python框架flask的注解路由。如下:

func init() {
	ns := beego.NewNamespace("/v1",
		beego.NSNamespace("/object",
			beego.NSInclude(
				&controllers.ObjectController{},
			),
		),
		beego.NSNamespace("/user",
			beego.NSInclude(
				&controllers.UserController{},
			),
		),
		beego.NSNamespace("/student",
			beego.NSInclude(
				&controllers.StudentController{},
			),
		),
	)
	beego.AddNamespace(ns)
}

此时匹配如下路由

/v1/object
/v1/user
/v1/student
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!