基于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如何进行代码管理 初识开…

服务器部署测试环境回顾与改进建议

任务概述: 原计划在2小时内完成的任务,由于遇到一系列挑战,最终耗时1.5天。任务目标是在无外网环境的服务器上建立测试环境,涉及将SSD硬盘数据迁移至服务器、SSH连接、运行测试程序并监控服务器功耗。 高效实施策略:…

fs读取目录、文件

fs读取文件 process.cwd() 是 Node.js 中的一个方法,它返回 Node.js 进程的当前工作目录。这个工作目录通常是启动 Node.js 进程时所在的目录。 const fs require(fs); const path require(path);// 读取指定目录 const configPath path.join(process.cwd(), c…

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&#…

数仓技术选型特点

高性能:用全并行的MPP架构数据库,业务数据被分散存储在多个节点上,数据分析任务被推送到数据所在位置就近执行,并行地完成大规模的数据处理工作,实现对数据处理的快速响应。 易扩展:Shared-Nothing开放架构…

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

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

Vue官网“食用指南”

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

/proc/cpuinfo文件内容详解

/proc/cpuinfo 文件包含了有关系统 CPU 的信息,每一行代表一个属性及其对应的值。以下是一些常见的属性及其含义: 1. processor:表示 CPU 的物理编号,通常从 0 开始递增。 2. vendor_id:CPU 厂商的名称,如…

蓝桥杯 砝码称重 dp/dfs

题目链接&#xff1a; https://www.lanqiao.cn/problems/1447/learning/?subject_code1&group_code4&match_num12&match_flow1&origincup 思想&#xff1a;dfs暴力枚举过一半的分 代码&#xff1a; #include<bits/stdc.h> using namespace std;#def…

快速开发一个鸿蒙的页面

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

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

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

FRM模型十二:极值理论

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

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 …