基于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 routersimport ("../controllers""github.com/astaxie/beego"
)func Init() {beego.Router("/home/login", &controllers.LoginController{})beego.Router("/home/logout", &controllers.LogoutController{})
}

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

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

package routersimport ("../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 = truebeego.BConfig.Listen.EnableHTTP = false

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

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

	beego.BConfig.Listen.HTTPAddr = models.ServerHostbeego.BConfig.Listen.HTTPPort = models.ServerPortbeego.BConfig.Listen.HTTPSAddr = models.ServerHostbeego.BConfig.Listen.HTTPSPort = models.ServerPortport, err := beego.AppConfig.Int("httpport")if err == nil {beego.BConfig.Listen.HTTPPort = portbeego.BConfig.Listen.HTTPSPort = port}host := beego.AppConfig.String("serveraddr")if len(host) != 0 {beego.BConfig.Listen.HTTPSAddr = hostbeego.BConfig.Listen.HTTPAddr = host}beego.BConfig.Listen.EnableHTTPS = falsebeego.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 = truebeego.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.ConfigcaCert := 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================================")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

源码的角度分析Vue2数据双向绑定原理

什么是双向绑定 我们先从单向绑定切入,其实单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新。那么双向绑定就可以从此联想到,即在单向绑定的基础上,用户更新…

微信开发者工具-代码管理和码云Github远程仓库集成

目录 思考:IDE如何进行代码管理 代码管理方式 一、自身提供服务 二、Git 扩展 1、环境准备 2、创建项目代码 3、进行项目Git初始化 4、在码云新建远程仓库 5、将项目进行远程仓库关联 三、SVN扩展 四、代码管理 思考:IDE如何进行代码管理 初识开…

StarRocks实战——贝壳找房数仓实践

目录 前言 一、StarRocks在贝壳的应用现状 1.1 历史的数据分析架构 1.2 OLAP选型 1.2.1 离线场景 1.2.2 实时场景 1.2.3 StarRocks 的引入 二、StarRocks 在贝壳的分析实践 2.1 指标分析 2.2 实时业务 2.3 可视化分析 三、未来规划 3.1 StarRocks集群的稳定性 3…

PMP考试培训费用多少钱?

PMP考试的相关费用包括报名费用、培训费用和证书续证费用三个部分。 一、PMP考试报名费用: 首次报考费用为3900元,如果未通过考试可以在英文报名有效期内进行补考报名,补考费用为2500元。 付费方式是在项目管理学会官方网站上提交报考资料…

企业数字化转型的第一步:由被动多云向主动多云转变

随着经济环境、市场形势、技术发展、用户需求等诸多因素的变化,数字化转型为企业进一步提升效率和竞争力、提供更加丰富的个性化产品和服务、进行业务场景创新、探寻新的增长机会和运营模式提供了崭新的途径。越来越多的企业意识到,数字化转型已不是企业…

第1篇 Linux Docker安装rabbitmq

Docker安装RabbitMq 1、搜索rabbitmq镜像 docker search rabbitmq2、下载rabbitmq镜像 docker pull rabbitmq3、运行rabbitmq服务 docker run -d --name rabbitmq --restart always -p 15672:15672 -p 5672:5672 rabbitmq4、访问rabbitmq http://192.168.1.x:15672 5、rab…

亚信安慧AntDB:打破数据孤岛,实现实时处理

AntDB数据库以其独特的创新能力在分布式数据库领域引领潮流。其中,融合统一与实时处理是其两大核心创新能力,为其赢得广泛关注与赞誉。融合统一意味着AntDB能够将多种不同类型的数据库融合为一体,实现数据的统一管理与处理,极大地…

电视盒子什么品牌好?资深数码粉强推口碑电视盒子推荐

我对各类数码产品是非常熟悉的,尤其是电视盒子,用过超十五款了,涵盖了各个主流品牌,最近看到很多朋友在讨论不知道电视盒子什么品牌好,我这次要来分享的就是口碑最好的五款电视盒子推荐给各位不懂如何选电视盒子的新手…

AI、AIGC、AGI、ChatGPT它们的区别?

今天咱们聊点热门话题,来点科普时间——AI、AIGC、AGI和ChatGPT到底是啥?这几个词听起来好像挺神秘的,但其实它们就在我们生活中。让我们一起探索这些术语的奥秘! AI(人工智能):先说说AI&#…

电梯物联网之梯控相机方案-防止电瓶车进电梯

梯控现状 随着电梯产品在智能化建筑的日益普及,对于电梯的智能化管理 安全性需求 的要求越来越迫切。尤其今年来随着电瓶车的大量普及,发起多起楼道、轿厢电瓶车着火恶性事件, 造成了极大的社会 负面影响。控制电瓶车进入单元门,楼道以及电梯…

Vue官网“食用指南”

把Vue官网当做一个工具来用,有问题,先来官网查一查。 官网中常用的板块 官网:https://cn.vuejs.org/上手后,最常用的模块是【快速上手】【API】。所以务必要知道这两个模块在哪里,怎么使用。![image.png](https://img…

快速开发一个鸿蒙的页面

文章目录 前言常用组件快速开启简单的鸿蒙页面总结 一、前言 鸿蒙要想快速上手,那么就需要对基础的组件使用比较熟悉,这里就罗列开发中常见的基础组件的使用。 只要是写android的,对于这些组件的使用还是能很快上手的,只要多多…

01-prometheus监控系统-安装部署prometheus

一、准备环境 主机名ip配置prometheus-server3110.0.0.311核1g-20GBprometheus-server3210.0.0.311核1g-20GBprometheus-server3310.0.0.311核1g-20GB 二、下载/上传软件包 1,软件包地址 这里给大家准备了百度云盘的安装包; 链接:https:/…

FRM模型十二:极值理论

目录 极值理论介绍GEVPOT 代码实现 极值理论介绍 在风险管理中,将事件分为高频高损、高频低损、低频高损、低频低损。其中低频高损是一种非常棘手的损失事件,常出现在市场大跌、金融体系崩溃、金融危机以及自然灾害等事件中。 由于很难给极端事件一个准…

Spring 学习记录

Spring 学习记录 1. Spring和SpringFrameWork1.1 广义的Spring2.1 狭义的Spring2.3 SpringFrameWork / Spring框架图 2. Spring IOC容器(即上图中的Core Container)2.1 相关概念 (IOC DI 容器 组件)2.2 Spring IOC容器的作用2.3 Spring IOC容器接口和具体实现类 3. Spring IOC …

flask 数据库迁移报错 Error: No such command ‘db‘.

初学FLASK,使用pycharm的terminal 启动,实现数据库迁移 文件结构 项目启动文件不在一级目录pycharm>terminal启动 由于自己初入 python flask 很多东西并不懂,只能依葫芦画瓢,使用如下命令,输入完第一行命令执行没有任何错误…

Vue ElementUI 修改消息提示框样式—messageBox 的大小

在窄屏模式下(移动端或pda),提示框的宽度太宽,会出现显示不完全的问题。 应当如何修改 ElementUI 的样式呢? open() {this.$confirm(window.vm.$i18n.t("tips.conLogOut"),window.vm.$i18n.t("tips.tip…

11-Linux部署集群准备

Linux部署集群准备 介绍 在前面,我们所学习安装的软件,都是以单机模式运行的。 后续,我们将要学习大数据相关的软件部署,所以后续我们所安装的软件服务,大多数都是以集群化(多台服务器共同工作&#xff…

【机器学习实战1】泰坦尼克号:灾难中的机器学习(一)数据预处理

🌸博主主页:釉色清风🌸文章专栏:机器学习实战🌸今日语录:不要一直责怪过去的自己,她曾经站在雾里也很迷茫。 🌼实战项目简介 本次项目是kaggle上的一个入门比赛 :Titani…

锚索测力计数据处理与分析:MCU自动测量单元的应用

锚索测力计作为一种重要的工程监测工具,在桥梁、大坝、隧道等结构物的健康监测中发挥着日益重要的作用。如何高效、准确地处理和分析,锚索测力计所获取的数据成为了工程师们面临的重要问题。近年来,随着微控制器(MCU)技术的快速发展&#xff…