goframe开发一个企业网站 模版界面4

###goframe已有了模板的功能

{{"string"}}     // 一般 string
{{`raw string`}} // 原始 string
{{'c'}}          // byte
{{print nil}}    // nil 也被支持
{{. | FuncA | FuncB | FuncC}}

{{if .condition}}
    ...
{{else}}
	{{if .condition2}}
        ...
    {{end}}
{{end}}

{{range $key, $value := .MapContent}}
    {{$key}}:{{$value}}
{{end}}

{{include "模板文件名(需要带完整文件名后缀)" .}}

{{/*
comment content
support new line
*/}}
删除空白符号
删除移除空格换行符

# 使用{{-语法去除模板内容左侧的所有空白符号, 使用-}}去除模板内容右侧的所有空白符号。

# 注意:-要紧挨{{}},同时与模板值之间需要使用空格分隔。

{{- .Name -}}
{{- range $key, $value := .list}}
  "{{$value}}"
{{- end}}

模版的选择

在https://sc.chinaz.com/moban/找到喜欢的模板
前台模版:https://sc.chinaz.com/mobandemo.aspx?downloadid=19202411041264
后台模版:https://sc.chinaz.com/mobandemo.aspx?downloadid=1202491158443
本文是为了开发传统的界面,以利于SEO,而不是开发vue react,进行完全的前后端分离。

将静态文放到其需的地方。

在resource 的template存放到相关的目录,front 前端, admin 后台。
在这里插入图片描述
在开发过程中发现前端过于繁杂,又换了一个,大家以后可以去下载。

路由及controller的开发

在api/admin中加入login.go,来定义一下API接口定义,包含请求/响应结构体

// 定义包名为 admin,表示这是管理后台相关的 API
package admin

import (
    "context"  // 用于处理上下文
    "github.com/gogf/gf/v2/frame/g"  // GoFrame 框架的核心包
)

// LoginReq 登录请求结构体
type LoginReq struct {
    // g.Meta 是 GoFrame 的路由元数据,使用结构体标签定义路由信息
    g.Meta `path:"/login"           // 路由路径为 /login
            tags:"Hello"            // Swagger 文档标签
            method:"get"            // HTTP 请求方法为 GET
            summary:"You first hello api"` // API 描述
}
// LoginRes 登录响应结构体
type LoginRes struct {
    // 可以在这里添加需要返回的字段
    // 例如:
    // Token string `json:"token" dc:"登录令牌"`
    // UserInfo map[string]interface{} `json:"userInfo" dc:"用户信息"`
}

// LogoutReq 登出请求结构体
type LogoutReq struct {
    g.Meta `path:"/logout"          // 路由路径为 /logout
            tags:"Hello"            // Swagger 文档标签
            method:"post"           // HTTP 请求方法为 POST
            summary:"Admin logout api"` // API 描述
}
// LogoutRes 登出响应结构体
type LogoutRes struct {
    // 可以在这里添加需要返回的字段
    // 例如:
    // Message string `json:"message" dc:"退出信息"`
}

// ILogin 定义登录模块的接口
type ILogin interface {
    // Login 处理登录请求
    // ctx: 上下文,用于处理请求的整个生命周期
    // req: 登录请求参数
    // 返回值:
    // - res: 登录响应
    // - err: 错误信息
    Login(ctx context.Context, req *LoginReq) (res *LoginRes, err error)

    // Logout 处理登出请求
    // ctx: 上下文
    // req: 登出请求参数
    // 返回值:
    // - res: 登出响应
    // - err: 错误信息
    Logout(ctx context.Context, req *LogoutReq) (res *LogoutRes, err error)
}

以上代码为了注解修改了格式不能直接使用

package admin

import (
	"context"

	"github.com/gogf/gf/v2/frame/g"
)

type LoginReq struct {
	g.Meta `path:"/login" tags:"Hello" method:"get" summary:"You first hello api"`
}
type LoginRes struct {
}

type LogoutReq struct {
	g.Meta `path:"/logout" tags:"Hello" method:"post" summary:"Admin logout api"`
}
type LogoutRes struct {
}

type ILogin interface {
	Login(ctx context.Context, req *LoginReq) (res *LoginRes, err error)
	Logout(ctx context.Context, req *LogoutReq) (res *LogoutRes, err error)
}

的internal 中的admin加入一个controller ,如下代码

// Package admin 提供后台管理相关的控制器
// Package admin 提供后台管理相关的控制器
package admin

import (
	"context"
	"web/api/admin"

	"github.com/gogf/gf/v2/frame/g"
)

//  实现登录控制器
type Controller struct{}

// New 创建一个新的登录控制器实例
func New() admin.ILogin {
	return &Controller{}
}

// Login 处理管理员登录请求
// ctx: 上下文
// req: 登录请求参数
// 返回登录响应和可能的错误
func (c *Controller) Login(ctx context.Context, req *admin.LoginReq) (res *admin.LoginRes, err error) {
	g.RequestFromCtx(ctx).Response.Writeln("Login !")
	return
}
func (c *Controller) Logout(ctx context.Context, req *admin.LogoutReq) (res *admin.LogoutRes, err error) {
	g.RequestFromCtx(ctx).Response.Writeln("Logout success!")
	return
}

在入口文件cmd.go注册路由

package cmd

import (
	"context"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
	"github.com/gogf/gf/v2/os/gcmd"
	"github.com/gogf/gf/v2/os/gctx"
	"github.com/gogf/gf/v2/os/gsession"
	"web/internal/controller/admin"

)


var (
	Main = gcmd.Command{
		Name:  "main",
		Usage: "main",
		Brief: "start http server",
		Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
			 s := g.Server() // 创建服务器实例
            
            // 配置管理后台路由组
            s.Group("/admin", func(group *ghttp.RouterGroup) {
                // 注册响应处理中间件
                group.Middleware(ghttp.MiddlewareHandlerResponse)
                // 绑定后台控制器
                group.Bind(
                    admin.New(), // 注册管理后台控制器
                )
            })
            
            s.Run() // 启动服务器
			return nil
		},
	}
)

运行可以看到效果!!!

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

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

相关文章

一、k8s快速入门之学习Kubernetes组件基础

一、三个容器管理器平台 Apache MESOS 开源的分布式资源管理框架,被推特选为基础平台,2019年推特换位k8s,MESOS最新版可以在MESOS上管理k8sDOCKER SWARM docker总部发行的,实现docker的集群方案,和docker捆版一起&…

初始JavaEE篇——多线程(7):定时器、CAS

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 定时器的使用 定时器的原理 模拟实现定时器 CAS 介绍 CAS的应用场景 解析 AtomicInteger 类 实现自旋锁 CAS的缺陷…

【UGUI】为射击游戏添加动态显示的分数和血量到UI界面

项目背景 在这个项目中,我们希望实现一个简单的游戏系统,其中玩家可以通过击中目标来获得分数,同时通过与怪物碰撞来减少血量。分数和血量需要在游戏界面上实时显示,以便玩家能够随时了解自己的状态。 技术实现 1. 静态变量的使…

stm32引脚PB3、PB4、PA15作为普通IO口用时,需要先解除调试端口复用

当项目调试的时候,发现PA15引脚无论配置输出高还是低或者输入,均只能输出3.3V的高电平。 目前STM的硬件调试有两种方法,JTAG和SW的方式,目前个人认为最好的方式就是SW,因为它只占用PA13和PA14两个IO。而JTAG还要多占用…

MATLAB与STK互联:仿真并获取低轨卫星与指定区域地面站的可见性数据

MATLAB控制STK实现:仿真并获取低轨卫星与指定区域地面站的可见性数据 本次仿真主要参考了多篇文献和网站,包括但不限于:《Using MATLAB for STK Automation》、CSDN博文: 拜火先知的博客_CSDN博客-笔记、AGI官网有关MATLAB的内容…

用Python设置、更新和获取Excel单元格的值

Excel工作簿作为一款广泛使用的数据管理工具,与Python相结合,可以使得自动化处理大量数据成为可能。通过Python来设置、更新以及读取Excel单元格的值,不仅可以极大地提高工作效率,减少重复劳动,还能增强数据处理流程的…

Golang | Leetcode Golang题解之第525题连续数组

题目: 题解: func findMaxLength(nums []int) (maxLength int) {mp : map[int]int{0: -1}counter : 0for i, num : range nums {if num 1 {counter} else {counter--}if prevIndex, has : mp[counter]; has {maxLength max(maxLength, i-prevIndex)} …

提升网站安全性 HTTPS的重要性与应用指南

内容概要 在如今数字化快速发展的时代,网站安全显得尤为重要。许多用户在访问网站时,尤其是涉及个人信息或金融交易时,对数据传输的安全性有着高度的关注。HTTPS(超文本传输安全协议)正是为了满足这种需求而诞生的。通…

DICOM标准:解析DICOM属性中的病人模块

目录 病人模块概述 1. 病人关系模块(Patient Relationship Module) 2. 病人识别模块(Patient Identification Module) 3. 病人统计模块(Patient Demographic Module) 4. 病人医学模块(Pati…

编写高性能爬虫抓取股票行情数据

最近给一个私募大佬帮忙做了一些股票交易有关的系统,其中涉及到行情数据抓取的问题,一番摸索之后,把成果在这里做个分享。 我把行情抓取的部分,和一个写手记的小功能,单独拿了出来放在一个小系统里面,可以…

人像摄影笔记(自用)

相机的原理:镜头--CMOS传感器---通过ISP的计算 然后通过手机的GPU处理后呈现出图片的形式 镜头:定焦和变焦,变焦分为光学变焦和数字变焦 光学变焦:焦距变了 画质不变 数字变焦:焦距不变 裁剪画质 数字变焦一…

前端埋点与监控最佳实践:从基础到全流程实现.

前端埋点与监控最佳实践:从基础到全流程实现 大纲 我们会从以下三个方向来讲解埋点与监控的知识: 什么是埋点?什么是监控? JS 中实现监控的核心方案 写一个“相对”完整的监控实例 一、什么是埋点?什么是监控&am…

电能质量治理产品在分布式光伏电站的应用

1.概述 随着全球对可再生能源需求的不断增长,分布式光伏电站的建设与扩张正迅速发展。然而,在其运行过程中,分布式光伏电站遭遇了一系列挑战,包括企业关口计量点功率因数降低和谐波污染等问题。这些问题不仅影响了光伏电站的运行…

遥感图像Trento原始数据集下载

遥感图像Trento原始数据集下载 偶然间在某个项目里发现了Trento的完整数据集,不过那个数据集有些奇怪的小改动 虽然我已经不做遥感方向了,不过当初我找这个数据集也是花了很长时间 于是重新整理了一下,就当是方便后来的研究者使用吧 githu…

GenAI 生态系统现状:不止大语言模型和向量数据库

自 20 个月前 ChatGPT 革命性的推出以来,生成式人工智能(GenAI)领域经历了显著的发展和创新。最初,大语言模型(LLMs)和向量数据库吸引了最多的关注。然而,GenAI 生态系统远不止这两个部分&#…

个人应用接入使用阿里云盘和百度网盘

一、阿里云盘 官方文档接入流程 语雀流程概述服务端 API 调用流程如下图所示1. 创建账...https://www.yuque.com/aliyundrive/zpfszx/btw0tw 1. 接入授权 1.1. App Key、App Secret和用户授权验证 在通过网盘开发者认证之后,创建个人应用会生成APP ID&#xff…

医院信息化与智能化系统(15)

医院信息化与智能化系统(15) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…

从比亚迪超越特斯拉,看颠覆全球市场的中国力量

这是比亚迪CEO王传福早年在日本调研电池供应链时发出的感慨。 那时的人们谁也没有想到,比亚迪会从深圳的一家普通的电池供应商开始做起,拼出一条属于自己的“血路”,摇身一变成为名副其实的“电车之王”,并让全球车企仰望。 比亚…

3d 添加辅助坐标器和轨道控制器

1.添加辅助坐标器 使用AxesHelper类来添加坐标轴辅助器,辅助器简单模拟3个坐标轴的对象。红色代表X轴,绿色代表Y轴,蓝色代表Z轴。 // 创建坐标轴辅助器,5是坐标轴的长度 const axesHelper new THREE.AxesHelper(5); // 将坐标轴…

「C/C++」C++标准库之#include<fstream>文件流

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…