Go 语言实现的简单 CMS Web

news2025/4/18 18:05:48

Go 语言实现的简单 CMS Web

以下是一个使用 Go 语言实现的简单 CMS Web 演示代码示例,

包含基本的内容管理功能:

项目结构

### 项目结构
```
cms-demo/
├── main.go
├── handlers/
├── models/
├── views/
│   ├── home.html
│   ├── article.html
│   ├── admin.html
│   └── base.html
├── static/
│   └── css/
└── go.mod

1. 依赖管理
```

### (go.mod)
```go
module cms-demo

go 1.21

require (
    github.com/gin-gonic/gin v1.9.1
    gorm.io/gorm v1.25.7
    gorm.io/driver/sqlite v1.5.4
)
 

2. 数据模型

###(models/article.go)
```go
package models

import (
    "time"
    "gorm.io/gorm"
)

type ArticleStatus int

const (
    Draft ArticleStatus = iota
    Published
)

type Article struct {
    gorm.Model
    Title     string
    Slug      string `gorm:"uniqueIndex"`
    Content   string `gorm:"type:text"`
    PublishAt time.Time
    Status    ArticleStatus
}
```

3. 主程序 (main.go)


```go
package main

import (
     _ "net/http"
    "cms-demo/handlers"
    "cms-demo/models"

    "github.com/gin-gonic/gin"
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

func main() {
    // 初始化数据库
    db, err := gorm.Open(sqlite.Open("cms.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }
    
    // 自动迁移模型
    db.AutoMigrate(&models.Article{})

    // 初始化 Gin
    r := gin.Default()
    
    // 设置静态文件
    r.Static("/static", "./static")

    // 设置模板
    r.LoadHTMLGlob("views/*.html")

    // 注册路由
    r.GET("/", handlers.HomeHandler(db))
    r.GET("/article/:slug", handlers.ArticleHandler(db))
    
    // 后台路由组
    admin := r.Group("/admin")
    {
        admin.GET("/", handlers.AdminHandler(db))
        admin.POST("/save", handlers.SaveArticleHandler(db))
    }

    // 启动服务
    r.Run(":8080")
}

4. 处理程序
```

### (handlers/handlers.go)
```go
package handlers

import (
    "net/http"
    "cms-demo/models"

    "github.com/gin-gonic/gin"
    "gorm.io/gorm"
)

func HomeHandler(db *gorm.DB) gin.HandlerFunc {
    return func(c *gin.Context) {
        var articles []models.Article
        db.Where("status = ? AND publish_at <= ?", 
            models.Published, time.Now()).Find(&articles)
        c.HTML(http.StatusOK, "home.html", gin.H{
            "articles": articles,
        })
    }
}

func ArticleHandler(db *gorm.DB) gin.HandlerFunc {
    return func(c *gin.Context) {
        slug := c.Param("slug")
        var article models.Article
        if err := db.Where("slug = ?", slug).First(&article).Error; err != nil {
            c.AbortWithStatus(http.StatusNotFound)
            return
        }
        c.HTML(http.StatusOK, "article.html", gin.H{
            "article": article,
        })
    }
}

func AdminHandler(db *gorm.DB) gin.HandlerFunc {
    return func(c *gin.Context) {
        var articles []models.Article
        db.Find(&articles)
        c.HTML(http.StatusOK, "admin.html", gin.H{
            "articles": articles,
        })
    }
}

func SaveArticleHandler(db *gorm.DB) gin.HandlerFunc {
    return func(c *gin.Context) {
        var article models.Article
        if err := c.ShouldBind(&article); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }

        // 创建或更新文章
        if article.ID != 0 {
            db.Model(&article).Updates(article)
        } else {
            db.Create(&article)
        }
        
        c.Redirect(http.StatusFound, "/admin")
    }
}
 

5. 模板示例

### 5. 模板示例 (views/home.html)
```html
{{ define "base" }}
<!DOCTYPE html>
<html>
<head>
    <title>{{ template "title" }}</title>
    <link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
    <header>
        <nav>
            <a href="/">Home</a>
            <a href="/admin">Admin</a>
        </nav>
    </header>
    <main>
        {{ template "content" . }}
    </main>
</body>
</html>

后面会介绍一个python版本的芯片测试工具系统

用户想要用Python制作一个芯片测试工具系统的demo。首先,我需要理解用户的具体需求。芯片测试工具可能涉及到硬件通信、数据分析、用户界面等方面。但用户可能只是需要一个简单的demo,所以不需要太复杂的功能。

首先,确定这个demo的范围。用户可能希望有一个命令行界面或者简单的图形界面,能够模拟测试流程,比如连接芯片、运行测试用例、显示结果。考虑到Python的库,可能用Tkinter做GUI,或者直接用命令行。但图形界面更直观,可能更适合demo。

接下来,硬件通信部分。真实的芯片测试可能需要通过串口、USB或者其他接口,但demo可能只需要模拟这部分。可以创建一个虚拟的芯片类,模拟连接、发送指令、接收响应。这样不需要实际硬件,用户也能运行。

然后,测试用例的管理。需要设计几个简单的测试用例,比如检查电压、电流、通信功能。每个测试用例应该有名称、描述、执行方法和预期结果。可以用类或字典来管理这些用例。

数据处理和日志记录也是重要的部分。测试结果需要保存,可能用CSV或文本文件记录,方便后续查看。同时,实时显示测试结果,让用户知道测试进度和状态。

异常处理需要考虑,比如连接失败、测试失败的情况,给出相应的提示信息。用户体验方面,需要清晰的步骤提示和结果展示,可能用颜色区分成功和失败。

代码结构方面,可能需要分成几个模块:硬件接口模拟、测试用例管理、用户界面、日志记录。但作为demo,可能先写在一个文件里更简单。

然后,验证整个流程是否合理。用户启动程序,连接芯片,选择或运行测试用例,查看结果,生成报告。需要考虑各个步骤之间的衔接,比如先连接再测试,处理测试中的异常。

最后,确保代码简洁,有注释,方便用户理解和扩展。可能还需要提供一些扩展思路,比如集成真实硬件、添加更多测试用例、使用数据库等。

现在,把这些思路整理成一个简单的代码框架。使用面向对象的方式,创建虚拟芯片类、测试管理器、GUI或命令行界面。模拟连接过程,添加几个测试用例,处理结果并记录日志。

测试时,确保各个功能模块正常工作,比如连接成功/失败的反馈,测试用例的执行和结果判断,日志是否正确生成。如果有问题,调整代码逻辑或异常处理部分。

总结,这个demo需要展示芯片测试的基本流程,包括连接、测试、结果处理和日志记录,同时保持代码简单易懂,方便用户在此基础上进行扩展。

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

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

相关文章

《MySQL基础:了解MySQL周边概念》

1.登录选项的认识 -h&#xff1a;指明登录部署了mysql服务的主机&#xff0c;默认为127.0.0.1-P&#xff1a;指明要访问的端口号&#xff0c;默认为3306-u&#xff1a;指明登录用户-p&#xff1a;指明登录密码 2.什么是数据库 2.1认识数据库 第一点理解。 mysql是数据库的客户…

RCL谐振电压增益曲线

谐振电路如何通过调频实现稳压&#xff1f; 为什么要做谐振&#xff1f; 在谐振状态实现ZVS导通&#xff0c;小电流关断 电压增益GVo/Vin&#xff0c;相当于产出投入比 当ff0时&#xff0c;G1时&#xff0c;输出电压输入电压 当G<1时&#xff0c;输出电压<输入电压 …

JavaScript:表单及正则表达式验证

今天我要介绍的是在JavaScript中关于表单验证内容的知识点介绍&#xff1a; 关于表单验证&#xff0c;我接下来则直接将内容以及效果显示出来并作注解&#xff0c;这样可以清晰看见这个表达验证的妙用&#xff1a; <form id"ff" action"https://www.baidu.…

一、Appium环境安装

找了一圈操作手机的工具或软件&#xff0c;踩了好多坑&#xff0c;最后决定用这个工具(影刀RPA手机用的也是这个)&#xff0c;目前最新的版本是v2.17.1&#xff0c;是基于nodejs环境的&#xff0c;有两种方式&#xff0c;我只试了第一种方式&#xff0c;第二种方式应该是比较简…

【c++深入系列】:new和delete运算符详解

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; “生活不会向你许诺什么&#xff0c;尤其不会向你许诺成功。它只会给你挣扎、痛苦和煎熬的过程。但只要你坚持下去&#xff0c;终有一天&…

正弦波有效值和平均值(学习笔记)

一个周期的正弦波在坐标轴上围的面积有多大&#xff1f; 一般正弦波以 y Asin(wx)表示&#xff0c;其中A为振幅&#xff0c;W为角速度。周期T 2π/w; 确定积分区间是x 0&#xff0c;到x 2π。 计算绝对值积分&#xff1a; 变量代还&#xff1a;wx θ&#xff0c;dx dθ…

第八天 开始Unity Shader的学习之Blinn-Phong光照模型

Unity Shader的学习笔记 第八天 开始Unity Shader的学习之Blinn-Phong光照模型 文章目录 Unity Shader的学习笔记前言一、Blinn-Phong光照模型①计算高光反射部分效果展示 二、召唤神龙:使用Unity内置的函数总结 前言 今天我们编写另一种高光反射的实现方法 – Blinn光照模型…

豆瓣图书数据采集与可视化分析

文章目录 一、适用题目二、豆瓣图书数据采集1. 图书分类采集2. 爬取不同分类的图书数据3. 各个分类数据整合 三、豆瓣图书数据清洗四、数据分析五、数据可视化1. 数据可视化大屏展示 源码获取看下方名片 一、适用题目 基于Python的豆瓣图书数据采集与分析基于Python的豆瓣图书…

常见的爬虫算法

1.base64加密 base64是什么 Base64编码&#xff0c;是由64个字符组成编码集&#xff1a;26个大写字母AZ&#xff0c;26个小写字母az&#xff0c;10个数字0~9&#xff0c;符号“”与符号“/”。Base64编码的基本思路是将原始数据的三个字节拆分转化为四个字节&#xff0c;然后…

YOLOV8 OBB 海思3516训练流程

YOLOV8 OBB 海思3516训练流程 目录 1、 下载带GPU版本的torch(可选) 1 2、 安装 ultralytics 2 3、 下载pycharm 社区版 2 4、安装pycharm 3 5、新建pycharm 工程 3 6、 添加conda 环境 4 7、 训练代码 5 9、配置Ymal 文件 6 10、修改网络结构 9 11、运行train.py 开始训练模…

[MySQL] 事务管理(二) 事务的隔离性底层

事务的隔离性底层 1.数据库并发的场景2.读-写2.1MVCC三个变量2.1.1 3个记录隐藏列字段2.1.2 undo日志 模拟MVCCselect 的读取2.1.3 Read View&#xff08;读视图&#xff09; 3.RR与RC的区别 1.数据库并发的场景 读-读&#xff1a;不存在问题&#xff0c;也不需要并发控制读-写…

20、.NET SDK概述

.NET SDK&#xff08;Software Development Kit&#xff09; 是微软提供的一套开发工具包&#xff0c;用于构建、运行和管理基于 .NET 平台的应用程序。它包含了一组丰富的工具、库和运行时环境&#xff0c;支持开发者在多种操作系统&#xff08;如 Windows、Linux 和 macOS&am…

18-21源码剖析——Mybatis整体架构设计、核心组件调用关系、源码环境搭建

学习视频资料来源&#xff1a;https://www.bilibili.com/video/BV1R14y1W7yS 文章目录 1. 架构设计2. 核心组件及调用关系3. 源码环境搭建3.1 测试类3.2 实体类3.3 核心配置文件3.4 映射配置文件3.5 遇到的问题 1. 架构设计 Mybatis整体架构分为4层&#xff1a; 接口层&#…

冒泡排序、插入排序、快速排序、堆排序、希尔排序、归并排序

目录 冒泡排序插入排序快速排序(未优化版本)快速排序(优化版本)堆排序希尔排序归并排序各排序时间消耗对比 冒泡排序 冒泡排序核心逻辑就是对数组从第一个位置开始进行遍历&#xff0c;如果发现该元素比下一个元素大&#xff0c;则交换位置&#xff0c;如果不大&#xff0c;就…

CD27.【C++ Dev】类和对象 (18)友元和内部类

目录 1.友元 友元函数 几个特点 友元类 格式 代码示例 2.内部类(了解即可) 计算有内部类的类的大小 分析 注意:内部类不能直接定义 内部类是外部类的友元类 3.练习 承接CD21.【C Dev】类和对象(12) 流插入运算符的重载文章 1.友元 友元函数 在CD21.【C Dev】类和…

QT安装详细步骤

下载 清华源 &#xff1a; 清华源 1. 2. 3. 4.

Unity游戏多语言工具包

由于一开始的代码没有考虑多语言场景&#xff0c;导致代码中提示框和UI显示直接用了中文&#xff0c;最近开始提取代码的中文&#xff0c;提取起来太麻烦&#xff0c;所以拓展了之前的多语言包&#xff0c;降低了操作复杂度。最后把工具代码提取出来到单独项目里面&#xff0c;…

实验三 I/O地址译码

一、实验目的 掌握I/O地址译码电路的工作原理。 二、实验电路 实验电路如图1所示&#xff0c;其中74LS74为D触发器&#xff0c;可直接使用实验台上数字电路实验区的D触发器&#xff0c;74LS138为地址译码器&#xff0c; Y0&#xff1a;280H&#xff5e;287H&…

视觉语言导航(VLN):连接语言、视觉与行动的桥梁

文章目录 1. 引言&#xff1a;什么是VLN及其重要性&#xff1f;2. VLN问题定义3. 核心挑战4. 基石&#xff1a;关键数据集与模拟器5. 评估指标6. 主要方法与技术演进6.1 前CLIP时代&#xff1a;奠定基础6.2 后CLIP时代&#xff1a;视觉与语言的统一 7. 最新进展与前沿趋势 (202…

计算机网络中科大 - 第7章 网络安全(详细解析)-以及案例

目录 &#x1f6e1;️ 第8章&#xff1a;网络安全&#xff08;Network Security&#xff09;优化整合笔记&#x1f4cc; 本章学习目标 一、网络安全概念二、加密技术&#xff08;Encryption&#xff09;1. 对称加密&#xff08;Symmetric Key&#xff09;2. 公钥加密&#xff0…