基于Beego 1.12.3的简单website实现
参考
- 用Beego开发web应用 https://www.cnblogs.com/zhangweizhong/p/10919672.html
- Beego官网 Homepage - beego: simple & powerful Go app framework
- build-web-application-with-golang https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/preface.md
- Beego开发文档 写在前面的话 · beego开发文档 · 看云
作者写这个工具的时候,beego 2.0还没有发布,所以用的是beego 1.12.3,用2.0的同学,可以自己改造下。
目录
一、安装
二、创建应用
2.1 conf
2.2 controllers
(图片来源网络,侵删)2.3 routers
2.4 static 和 views目录
2.5 models和data
三、Beego的配置
3.1 配置监听端口
3.2 static
(图片来源网络,侵删)3.3 证书的设置
3.4 日志设置
一、安装
go get github.com/astaxie/beego go get github.com/beego/bee
注意: beege和bee是两个概念。beego是框架,bee是工具,是命令。 在安装Beego前,先确认是否将$GOPATH/bin写入GO环境中。
二、创建应用
bee new webDemo //创建一个web应用
也不一定非要用这个命令,只要创建好对应的目录,放好文件就可以了。
目录结构如下:
2.1 conf
这个目录是beego的配置文件目录,里面有个app.conf文件,你可以配置任何你想要的东西。
2.2 controllers
这个目录主要是各个url的实现,我们作为WEB的服务端,主要的任务就是处理各个URL的消息。
当然不一定非要是这个名字,主要是当前主流默认这么写的。
// LoginController type LoginController struct { beego.Controller } //登录页面 func (c *LoginController) Get() { c.TplName = "login.html" } //登录功能 func (c *LoginController) Post() { } // LogoutController type LogoutController struct { beego.Controller } //登录退出功能 func (c *LogoutController) Post() { }
2.3 routers
这个目录是路由的定义,就是定义某个URL是由哪个controller去处理。
package routers import ( "../controllers" "github.com/astaxie/beego" ) func Init() { beego.Router("/home/login", &controllers.LoginController{}) beego.Router("/home/logout", &controllers.LogoutController{}) }
这里我定义的是两个URL,登陆和退出,分别由对应的controller去处理。
当然还另外一种定义方法:
package routers import ( "../controllers" "github.com/astaxie/beego" ) func Init() { beego.Router("/home/login", &controllers.AccessController{}, "get:HomeProcess") beego.Router("/home/login", &controllers.AccessController{}, "post:LoginProcess") beego.Router("/home/logout", &controllers.AccessController{},"post:LogoutProcess") }
就是比第一种方法多了个参数,而且是在同一个controller中处理。 这里就是定义两个URL分别由AccessController中的LoginProcess和LogoutProcess两个函数处理。
这个方法好的一点就是不需要那么多controller,不好的一点当然是放在一起的时候,很容易混淆,代码结构也看着不是很清晰。我更喜欢第一种方式。
2.4 static 和 views目录
static是静态访问目录。这里可以放置一些脚本之类的东西。
views是视图的目录,上面的get方法返回的login.html就是这个目录,不需要特定指定,按照上面 c.TplName = "login.html"的写法,默认返回的是views 目录的html页面信息。
2.5 models和data
这俩目录不是必须的,models可以放一些常量的定义,对象的定义等,数据类型的定义等。data目录可以放一下数据处理的动作,比如读写数据库,数据缓存等处理。
三、Beego的配置
这里介绍几个简单的,想要详细了解,可以去看相应的开发文档。
3.1 配置监听端口
beego.BConfig.Listen.HTTPAddr = "127.0.0.1" beego.BConfig.Listen.HTTPPort = int(8080) beego.BConfig.Listen.HTTPSAddr = "127.0.0.1" beego.BConfig.Listen.HTTPSPort = int(8080) beego.BConfig.Listen.EnableHTTPS = true beego.BConfig.Listen.EnableHTTP = false
指定对应的IP地址和监听端口,并且指定是使用HTTP还是HTTPS,也可以俩都用,就是需要并行进行两个监听。
也可以从app.conf中读取。通过beego的接口获取配置文件中的内容。这个文件也可以自定义的,但是一般情况没人这么搞,也没有必要。
beego.BConfig.Listen.HTTPAddr = models.ServerHost beego.BConfig.Listen.HTTPPort = models.ServerPort beego.BConfig.Listen.HTTPSAddr = models.ServerHost beego.BConfig.Listen.HTTPSPort = models.ServerPort port, err := beego.AppConfig.Int("httpport") if err == nil { beego.BConfig.Listen.HTTPPort = port beego.BConfig.Listen.HTTPSPort = port } host := beego.AppConfig.String("serveraddr") if len(host) != 0 { beego.BConfig.Listen.HTTPSAddr = host beego.BConfig.Listen.HTTPAddr = host } beego.BConfig.Listen.EnableHTTPS = false beego.BConfig.Listen.EnableHTTP = true
3.2 static
beego.SetStaticPath("/url", "static")
这里设置静态目录,第一个参数是以127.0.0.1:8080为基础的url,第二个是静态路径。
上面的代码就是指定访问127.0.0.1:8080/url的时候,返回static目录中index.html,index.html是默认的文件,如果是其他文件,可以在controllers中进行定义。
3.3 证书的设置
如果使用https,那么必然是要使用证书的,证书的生成可以使用openssl命令生成,这个网上有很多的教程。
sslEnable, _ := beego.AppConfig.Bool(models.SSL_ENABLE) if sslEnable { beego.BConfig.Listen.EnableHTTPS = true beego.BConfig.Listen.EnableHTTP = false } beego.BConfig.Listen.HTTPSCertFile = models.GetCertPemFile() beego.BConfig.Listen.HTTPSKeyFile = models.GetCertNewKeyFile() tlsConfig, err := models.GetTLSConfig() if err == nil { beego.BeeApp.Server.TLSConfig = tlsConfig }
// 获取TLS配置 func GetTlsConfig() (*tls.Config, error) { var config *tls.Config caCert := GetCaCertFile() pool, errPool := GetX509CACertPool(caCert) if errPool != nil { log.Error("generate certPool failed: %v", errPool) return config, errPool } config = &tls.Config{ RootCAs: pool, ClientAuth: tls.NoClientCert, MinVersion: tls.VersionTLS12, CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256}, } return config, nil }
上面这部分是证书的配置内容,只是简单的示例。
3.4 日志设置
jsonConfig := `{ "filename": "./log/server.log", "daily": true, "maxdays": 7, "maxsize": 10240000 }` _ = log.SetLogger("file", jsonConfig) log.SetLevel(log.LevelDebug) log.EnableFuncCallDepth(true) log.SetLogFuncCallDepth(4) log.Debug("=======================start server================================")
还没有评论,来说两句吧...