基于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================================")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

概率基础——多元正态分布

概率基础——多元正态分布 介绍 多元正态分布是统计学中一种重要的多维概率分布,描述了多个随机变量的联合分布。在多元正态分布中,每个随机变量都服从正态分布,且不同随机变量之间可能存在相关性。本文将以二元标准正态分布为例&#xff0…

PVLAN组网实验

一,PVLAN类型 主VLAN 主VLAN可以由多个辅助私用VLAN组成,而这些辅VLAN与主VLAN属于同一子网。 辅助VLAN ① 团体VLAN:如果某个端口属于团体VLAN,那么它就不仅能够与相同团体VLAN中的其他端口进行通信,而且还能够与…

【5G 接口协议】GTP-U协议介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

HTML~

HTML HTML是一门语言,所有的网页都是用HTML这门语言编写出来的HTML(HyperText Markup Language):超文本标记语言 超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容 标记语言:由标签构成的语言 …

SpringBoot源码解读与原理分析(三十八)SpringBoot整合WebFlux(一)WebFlux的自动装配

文章目录 前言第13章 SpringBoot整合WebFlux13.1 响应式编程与Reactor13.1.1 命令式与响应式13.1.2 异步非阻塞13.1.3 观察者模式13.1.4 响应性13.1.5 响应式流13.1.6 背压13.1.7 Reactor13.1.7.1 Publisher13.1.7.2 Subscriber13.1.7.3 Subscription13.1.7.4 Processor13.1.7.…

Python爬虫——解析常用三大方式之Xpath

目录 Xpath 安装xpath 安装lxml库 导入lxml库 解析本地文件 etree.parse() 解析服务器响应文件 etree.HTML() xpath基本语法 小案例:获取百度首页的百度一下 大案例:爬取站长素材图片 总结 Xpath 安装xpath 首先要学会安…

大模型(LLM)的量化技术Quantization原理学习

在自然语言处理领域,大型语言模型(LLM)在自然语言处理领域的应用越来越广泛。然而,随着模型规模的增大,计算和存储资源的需求也急剧增加。为了降低计算和存储开销,同时保持模型的性能,LLM大模型…

【排序算法】冒泡排序

目录 概述 冒泡排序原理 冒泡排序的Java实现 总结 概述 冒泡排序是一种简单但低效的排序算法。它重复地走访要排序的元素列,一次比较两个元素,如果它们的顺序错误就交换它们,直到没有元素需要交换。这个过程类似于气泡在水中上浮的过程&am…

开源模型Mistral 7B+Amazon SageMaker部署指南

一、Mistral 7B简述 Mistral AI 是一家总部位于法国的 AI 公司,其使命是将公开可用的模型提升至最先进的性能水平。他们专注于构建快速而安全的大型语言模型(LLM),此类模型可用于从聊天机器人到代码生成等各种任务。不久前其发布…

leetcode hot100 每日温度

在本题中,我们是通过单调栈来解决的,因为我们采用了栈的数据结构,并且,栈内存储的元素是单调的。 本题我们考虑,将气温数组元素的下标存入栈中,首先初始化要把0放入,0是下标的意思。然后我们拿…

谷歌seo推广哪里好优化?

大家都知道常规的SEO技巧,比如关键词优化、高质量的内容、外链建设之类的,这些是重点,但如果想锦上添花,我们可以尝试点不一样的 关注社区和参与论坛,这不仅是为了建立链接,更重要的是与目标群体建立连接&…

ZYNQ--MIG核配置

文章目录 MIG核配置界面多通道AXI读写DDR3MIG核配置界面 Clock Period: DDR3 芯片运行时钟周期,这个参数的范围和 FPGA 的芯片类型以及具体类型的速度等级有关。本实验选择 1250ps,对应 800M,这是本次实验所采用芯片可选的最大频率。注意这个时钟是 MIG IP 核产生,并输出给…

【Git】merge时报错:refusing to merge unrelated histories

文章目录 一、问题二、解决办法1、将feature分支的东西追加到master分支中2、将feature里的东西直接覆盖到master分支中 一、问题 今天将feature分支合并到master时报错:refusing to merge unrelated histories(拒绝合并无关历史) 报错原因&…

Python学习 day07(JSON)

JSON 各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型,而其他语言可能没有对应的字典,为了让不同的语言都能够相互通用的传递数据,JSON就是一种非常良好的中转数据格式,如下: JSON…

[线代]自用大纲

部分内容整理自张宇和网络 序 题型分布: 题型单题分值题目数量总分值选择题5315填空题515解答题12112 *一道大题可能用到六部分所有知识 矩阵 性质 k k k倍和乘积行列式 ∣ k A ∣ k n ∣ A ∣ |kA|k^n|A| ∣kA∣kn∣A∣ ∣ A B ∣ ≠ ∣ A ∣ ∣ B ∣ |AB|≠…

平台工程: 用Backstage构建开发者门户 - 2

本文介绍了如何使用开源Backstage构建自己的开发者门户,并基于此实践平台工程。本系列共两篇文章,这是第二篇。原文: Platform Engineering: Building Your Developer Portal with Backstage — Part 2 在本教程第一部分中我们了解了Backstage这个用于构…

【前端面试题5】利用 border 属性画一个三角形

举例1:利用 border 属性画一个三角形(小技巧) 完整代码如下: div{width: 0;height: 0;border: 50px solid transparent;border-top-color: red;border-bottom: none; }步骤如下: (1)当我们设…

手势识别应用介绍

目录 一、功能介绍 二、安装部署说明 2.1 文件目录说明 2.2 手势识别部分 一、功能介绍 这是一个通过摄像头捕获手势,根据不同的手势来做出不同操作的计算机程序。目前可以识别9种手势,可以根据识别到的手势,进行打开应用、增大音量、减小音量…

JProfiler 14 for Mac/win:Java开发者的性能分析利器

在Java开发的世界中,性能优化始终是一个不可忽视的议题。随着技术的不断进步,开发者对于工具的需求也日益增长。JProfiler 14,作为一款专为Java开发者设计的性能分析工具,无论是对于Mac用户还是Windows用户,都展现出了…

哈希表C++(Acwing)

代码&#xff1a; #include <iostream> #include <cstring>using namespace std;const int N 100003;int h[N], e[N], ne[N], idx;void insert(int x) {int k (x % N N) % N;//哈希,保证取模后为正数e[idx] x;ne[idx] h[k];h[k] idx; }bool find(int x) {in…