基于Beego 1.12.3的简单website实现

news2024/11/15 23:18:05

参考

  • 用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================================")

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

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

相关文章

猫头虎的技术林: 加速你的Python项目 - 如何配置国内pip下载源

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

vue3基础教程(1)——nodejs环境搭建

博主个人小程序已经上线:【中二少年工具箱】 小程序二维如下: 正文开始 专栏简介1. 环境菜单2.为什么下载node3. nodejs简介4. nodejs安装5. 编辑器选择 专栏简介 本系列文章由浅入深,从基础知识到实战开发,非常适合入门同学。…

【论文阅读】《PRODIGY: Enabling In-context Learning Over Graphs》

文章目录 0、基本介绍1、研究动机2、创新点3、挑战4、准备4.1、图上分类任务4.2、少样本提示4.3、提示图表示4.3.1、Data graph G D \mathcal{G}^D GD4.3.2、task graph G T \mathcal{G}^T GT 5、方法论5.1、提示图上的信息传播架构5.1.1、Data graph Message Passing5.1.2、…

开源版视频Diffusion Transformer来了吗?

今天分享的这篇文章来自于上海人工智能实验室,论文的Title为:Latte: Latent Diffusion Transformer for Video Generation。该方法探索如何有效的对视频中的时间、空间信息进行建模,将视频信息有效的处理成连续的tokens。另外在如何提高视频生…

leedcode刷题--day7(字符串)

23 文章讲解 力扣地址 C class Solution { public:void reverseString(vector<char>& s) {int left 0;int right s.size() - 1; // right 应该初始化为 s.size() - 1while (left < right) {swap(s[left], s[right]); // 直接交换 s[left] 和 s[right] 的值lef…

【rust】11、所有权

文章目录 一、背景二、Stack 和 Heap2.1 Stack2.2 Heap2.3 性能区别2.4 所有权和堆栈 三、所有权原则3.1 变量作用域3.2 String 类型示例 四、变量绑定背后的数据交互4.1 所有权转移4.1.1 基本类型: 拷贝, 不转移所有权4.1.2 分配在 Heap 的类型: 转移所有权 4.2 Clone(深拷贝)…

【论文阅读-基于VilLBERT方法的导航】Vison-Language Navigation 视觉语言导航(2)

文章目录 1. 【2023ICCV】Learning Vision-and-Language Navigation from YouTube Videos摘要和结论引言Building VLN Dataset from YouTube Videos模型框架实验 2. 【2021ICCV】Airbert: In-domain Pretraining for Vision-and-Language Navigation摘要和结论引言BnB DatasetA…

JavaWeb之 Web概述

目录 前言1.1 Web和 JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 1.3 JavaWeb 学习内容 前言 博主将用 CSDN 记录 Java 后端开发学习之路上的经验&#xff0c;并将自己整理的编程经验和知识分享出来&a…

3.1作业

作业要求&#xff1a; 通过w(红色臂角度增大)s&#xff08;红色臂角度减小&#xff09;d&#xff08;蓝色臂角度增大&#xff09;a&#xff08;蓝色臂角度减小&#xff09;按键控制机械臂 程序代码&#xff1a; #include<myhead.h> #define SER_IP "192.168.126.…

《C++ Primer Plus》《10、对象和类》

文章目录 前言&#xff1a;1 过程性编程和面向对象编程2 抽象和类2.1 类型是什么2.2 C中的类2.3 实现类成员函数2.4 使用类 3 类的构造函数和析构函数3.1 声明和定义构造函数3.2 使用构造函数3.3 默认构造函数3.4 析构函数 4 this指针5 对象数组6 类的作用域6.1 作用域为类的常…

云计算 2月20号 (认识操作系统)

1、认识操作系统 计算机系统的组成 知识点1&#xff1a;没有软件系统的计算机称之为"裸机" 知识点2&#xff1a;裸机提供基本的可计算性资源 知识点3&#xff1a;操作系统是最靠近硬件的软件层&#xff0c;负责管理和控制计算机硬件。 计算机硬件组成五大部件 运算器…

1美元持有ZKFair PFP-CyberArmy,潜在收益分析

3月2日&#xff0c;ZKFair PFP-CyberArmy 将在 Element 上正式开始Public Sale。

C++基于多设计模式下的同步异步日志系统day2

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容实现了日志代码设计的实…

防御保护课程笔记

内容安全 防病毒 过滤技术 密码学

移动互联网时代的APP上架流程和要点

摘要 本文将介绍移动应用程序上架的基本流程和要点&#xff0c;包括应用商店注册、APP材料准备、打包上传App、APP审核以及发布APP的详细步骤。此外&#xff0c;还会提到利用appuploder工具简化iOS应用上架步骤的方法&#xff0c; 引言 在移动互联网时代&#xff0c;开发一…

【笔记】深度学习入门:基于Python的理论与实现(六)

深度学习 深度学习是加深了层的深度神经网络 加深网络 本节我们将这些已经学过的技术汇总起来&#xff0c;创建一个深度网络&#xff0c;挑战 MNIST 数据集的手写数字识别 向更深的网络出发 基于33的小型滤波器的卷积层。激活函数是ReLU。全连接层的后面使用Dropout层。基…

Laravel框架: Call to a member function connect() on null 异常报错处理

Laravel框架&#xff1a; Call to a member function connect() on null 异常报错处理 Date: 2024.03.01 21:03:11 author: lijianzhan 原文链接: https://learnku.com/laravel/t/63721 问题&#xff1a; local.ERROR: Call to a member function connect() on null {"…

win安装卸载python3.13

一、安装 访问python官网&#xff1a;https://www.python.org/ 点击“Downloads” 点击“Windows” 找到自己要下载的版本和位数&#xff0c;比如我这个是3.13版本、64位的安装包 下载好了之后&#xff0c;双击安装包 勾选“Add python.exe to PATH”&#xff1a;把python环…

线程安全的集合容器

线程安全的集合容器 List集合中的线程安全的集合容器&#xff1a; 在旧版本中Vector是线程安全的集合容器&#xff0c;在JDK 1.5以后CopyOnWriteArrayList也是线程安全的集合容器&#xff0c;CopyOnWriteArrayList的数据结构是Object类型的数组。 CopyOnWriteArrayList是如何…

【问题记录】pip install遇到“No space left on device“

一、pip安装包的过程中出现以下问题 二、问题溯源 【1】刚开始以为是空间不足&#xff0c;后来 df -h 看了一下&#xff0c;pip安装目录下空间绝对足够&#xff01;明显不是空间不足的问题。 【2】后来查了一下&#xff0c;发现是home目录下的空间满了&#xff0c;pip安装时&…