• 基于Beego 1.12.3的简单website实现


    参考

    作者写这个工具的时候,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 日志设置


    一、安装

    1. go get github.com/astaxie/beego
    2. 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的消息。

    当然不一定非要是这个名字,主要是当前主流默认这么写的。

    1. // LoginController
    2. type LoginController struct {
    3. beego.Controller
    4. }
    5. //登录页面
    6. func (c *LoginController) Get() {
    7. c.TplName = "login.html"
    8. }
    9. //登录功能
    10. func (c *LoginController) Post() {
    11. }
    12. // LogoutController
    13. type LogoutController struct {
    14. beego.Controller
    15. }
    16. //登录退出功能
    17. func (c *LogoutController) Post() {
    18. }

    2.3 routers

    这个目录是路由的定义,就是定义某个URL是由哪个controller去处理。

    1. package routers
    2. import (
    3. "../controllers"
    4. "github.com/astaxie/beego"
    5. )
    6. func Init() {
    7. beego.Router("/home/login", &controllers.LoginController{})
    8. beego.Router("/home/logout", &controllers.LogoutController{})
    9. }

    这里我定义的是两个URL,登陆和退出,分别由对应的controller去处理。

    当然还另外一种定义方法:

    1. package routers
    2. import (
    3. "../controllers"
    4. "github.com/astaxie/beego"
    5. )
    6. func Init() {
    7. beego.Router("/home/login", &controllers.AccessController{}, "get:HomeProcess")
    8. beego.Router("/home/login", &controllers.AccessController{}, "post:LoginProcess")
    9. beego.Router("/home/logout", &controllers.AccessController{},"post:LogoutProcess")
    10. }

    就是比第一种方法多了个参数,而且是在同一个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 配置监听端口

    1. beego.BConfig.Listen.HTTPAddr = "127.0.0.1"
    2. beego.BConfig.Listen.HTTPPort = int(8080)
    3. beego.BConfig.Listen.HTTPSAddr = "127.0.0.1"
    4. beego.BConfig.Listen.HTTPSPort = int(8080)
    5. beego.BConfig.Listen.EnableHTTPS = true
    6. beego.BConfig.Listen.EnableHTTP = false

    指定对应的IP地址和监听端口,并且指定是使用HTTP还是HTTPS,也可以俩都用,就是需要并行进行两个监听。

    也可以从app.conf中读取。通过beego的接口获取配置文件中的内容。这个文件也可以自定义的,但是一般情况没人这么搞,也没有必要。

    1. beego.BConfig.Listen.HTTPAddr = models.ServerHost
    2. beego.BConfig.Listen.HTTPPort = models.ServerPort
    3. beego.BConfig.Listen.HTTPSAddr = models.ServerHost
    4. beego.BConfig.Listen.HTTPSPort = models.ServerPort
    5. port, err := beego.AppConfig.Int("httpport")
    6. if err == nil {
    7. beego.BConfig.Listen.HTTPPort = port
    8. beego.BConfig.Listen.HTTPSPort = port
    9. }
    10. host := beego.AppConfig.String("serveraddr")
    11. if len(host) != 0 {
    12. beego.BConfig.Listen.HTTPSAddr = host
    13. beego.BConfig.Listen.HTTPAddr = host
    14. }
    15. beego.BConfig.Listen.EnableHTTPS = false
    16. 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命令生成,这个网上有很多的教程。

    1. sslEnable, _ := beego.AppConfig.Bool(models.SSL_ENABLE)
    2. if sslEnable {
    3. beego.BConfig.Listen.EnableHTTPS = true
    4. beego.BConfig.Listen.EnableHTTP = false
    5. }
    6. beego.BConfig.Listen.HTTPSCertFile = models.GetCertPemFile()
    7. beego.BConfig.Listen.HTTPSKeyFile = models.GetCertNewKeyFile()
    8. tlsConfig, err := models.GetTLSConfig()
    9. if err == nil {
    10. beego.BeeApp.Server.TLSConfig = tlsConfig
    11. }
    1. // 获取TLS配置
    2. func GetTlsConfig() (*tls.Config, error) {
    3. var config *tls.Config
    4. caCert := GetCaCertFile()
    5. pool, errPool := GetX509CACertPool(caCert)
    6. if errPool != nil {
    7. log.Error("generate certPool failed: %v", errPool)
    8. return config, errPool
    9. }
    10. config = &tls.Config{
    11. RootCAs: pool,
    12. ClientAuth: tls.NoClientCert,
    13. MinVersion: tls.VersionTLS12,
    14. CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256},
    15. }
    16. return config, nil
    17. }

    上面这部分是证书的配置内容,只是简单的示例。

    3.4 日志设置

    1. jsonConfig := `{
    2. "filename": "./log/server.log",
    3. "daily": true,
    4. "maxdays": 7,
    5. "maxsize": 10240000
    6. }`
    7. _ = log.SetLogger("file", jsonConfig)
    8. log.SetLevel(log.LevelDebug)
    9. log.EnableFuncCallDepth(true)
    10. log.SetLogFuncCallDepth(4)
    11. log.Debug("=======================start server================================")

  • 相关阅读:
    L1-019 谁先倒 C++解法
    【leetcode】【剑指offer Ⅱ】047. 二叉树剪枝
    FPGA实现UDP传输视频,提供2套verilog工程源码和接收显示上位机程序
    android系统签名 V1,V2,V3
    剪映failed to initialize,cuda.is_available()为false解决
    三数之和(双指针)
    gitcode代码仓库的基本使用
    数据库 SQL常用语句
    keepalived实现nginx负载均衡机高可用
    Centos7安装mysql(只需六步)
  • 原文地址:https://blog.csdn.net/ZHAOJUNWEI08/article/details/136366356