使用beego操作数据库的简单web项目

1、beego介绍

        Beego 是一个开源的、高性能的Go语言框架,用于快速开发RESTful API、Web应用、后端服务等各种类型的软件。它由国人Asta Xie创建,并得到了广泛的社区支持。Beego的设计理念是让开发者能够以最少的时间和代码量来完成Web应用的开发。

以下是Beego的一些主要特点:

  1. 全栈框架:Beego是一个全栈框架,包含了大多数Web开发所需的功能模块,如路由处理、模板渲染、ORM、缓存、日志等。

  2. 模块化设计:Beego由多个模块组成,每个模块都可以独立使用,也可以整合在一起使用,提供了很高的灵活性。

  3. 自动化工具:Beego提供了命令行工具bee,可以自动生成项目结构、管理依赖、热重载、自动化测试等功能。

  4. RESTful支持:Beego原生支持RESTful风格的URL路由设计,方便构建API服务。

  5. ORM:Beego内置了ORM模块,支持多种数据库,简化了数据库操作。

  6. 缓存支持:Beego支持多种缓存系统,如Memcache、Redis等。

  7. 配置管理:Beego提供了强大的配置管理功能,支持多种配置文件格式,如INI、XML、JSON、YAML等。

  8. 性能监控:Beego内置了性能监控模块,可以实时监控应用的运行状态。

  9. 安全性:Beego提供了一系列的安全措施,如XSS攻击防护、SQL注入防护等。

  10. 社区支持:Beego有着活跃的社区,提供了大量的文档、教程和第三方插件。

BEEGO架构图 

 Beego uses a standard Model-View-Controller (MVC) architecture for logic execution.

beego是标准的mvc的模式,下图就是整个流程的加载顺序。

2、操作介绍

    1.代理设置

        GOPROXY=https://goproxy.cn

    2.创建项目

        bee new beego-project

    3.下载依赖

        go mod tidy

  这个命令会做以下几件事情:

  • 添加缺失的模块提供导入的包。
  • 移除不用的模块不提供导入的包。
  • 更新go.mod文件中的依赖项到最新的兼容版本。
  • 下载所有需要的依赖到本地缓存(默认是$GOPATH/pkg/mod目录)。

如果你的go.mod文件已经是最新的,并且你想直接下载所有依赖,而不对go.mod文件进行任何修改,你可以使用以下命令:

        go mod download

这个命令会下载go.mod文件中列出的所有依赖,但是不会添加或删除任何依赖项。

3、目录结构

conf:放置一些配置文件等

appname = bee-project
httpport = 8081
runmode = dev

controller:控制器

db_user.go

package controllers

import (
	// 注意这里的bee-project是go.mod里面的名称 而不是项目名称
	"bee-project/models"
	beego "github.com/beego/beego/v2/server/web"
)

type DbUserController struct {
	beego.Controller
}

func (c *DbUserController) DoAdd() {
	models.Add()
	c.Ctx.WriteString("保存数据成功!")
}


func (c *DbUserController) DoDelete() {
	models.Delete()
	c.Ctx.WriteString("删除数据成功!")
}


func (c *DbUserController) DoUpdate() {
	models.Update()
	c.Ctx.WriteString("更新数据成功!")
}

func (c *DbUserController) Get() {
	models.Find()
	c.Ctx.WriteString("查询数据成功!")
}


default.go

package controllers

import (
	beego "github.com/beego/beego/v2/server/web"
)

type MainController struct {
	beego.Controller
}

func (c *MainController) Get() {
	c.Data["Website"] = "beego.vip"
	c.Data["Email"] = "astaxie@gmail.com"
	c.TplName = "index.tpl"
}

goods.go

package controllers

import (
	"encoding/json"
	beego "github.com/beego/beego/v2/server/web"
)

type GoodsController struct {
	beego.Controller
}

func (c *GoodsController) Get() {
	c.Data["title"] = "你好beego goods"
	c.Data["num"] = 12
	c.TplName = "goods.tpl"
}

func (c *GoodsController) DoAdd() {
	c.Ctx.WriteString("增加商品")
}

type Product struct {
	Name string `json:"name"`
	Price int `json:"price"`
}

// 将接收到的body参数以json格式返回出去
func (c *GoodsController) DoEdit() {
	var product Product
	err := json.NewDecoder(c.Ctx.Request.Body).Decode(&product)
	if err != nil {
		c.Ctx.ResponseWriter.WriteHeader(400)
		c.Ctx.WriteString("error parsing request body")
		return
	}
	c.Data["json"] = &product
	c.ServeJSON()
}

func (c *GoodsController) DoDelete() {
	c.Ctx.WriteString("删除商品")
}

hello.go

package controllers

import (
	beego "github.com/beego/beego/v2/server/web"
)

type HelloController struct {
	beego.Controller
}

func (c *HelloController) Get() {
	c.Data["msg"] = "hello beego frank set value to hello views"
	c.TplName = "hello.tpl"
}

user.go

package controllers

import (
	"fmt"
	beego "github.com/beego/beego/v2/server/web"
	"strconv"
)

type UserController struct {
	beego.Controller
}

func (c *UserController) Get() {
	c.Ctx.WriteString("用户中心")
}

func (c *UserController) AddUser() {
	c.TplName = "userAdd.tpl"
}

//处理post请求
func (c *UserController) DoAddUser() {
	id, err := c.GetInt("id")
	if err != nil {
		c.Ctx.WriteString("id必须是int类型")
		return
	}
	username := c.GetString("username")
	password := c.GetString("password")
	hobby := c.GetStrings("hobby")
	fmt.Printf("爱好值:%v-------------类型:%T", hobby, hobby)
	// id 是int 类型的 需要转换成string类型
	c.Ctx.WriteString("用户中心:" + strconv.Itoa(id) + " " + username + " " + password)
}

func (c *UserController) EditUser() {
	c.TplName = "userEdit.tpl"
}

type User struct {
	// form 表示form表单提交的username和这里的Username映射,json 表示返回的字段Username使用username替换展示
	Username string `form:"username" json:"username"`
	Password string `form:"password" json:"password"`
	Hobby []string `form:"hobby" json:"hobby"`
}

func (c *UserController) DoEditUser()  {
	u := User{}
	if err := c.ParseForm(&u); err != nil {
		c.Ctx.WriteString("post提交数据失败!")
	}
	fmt.Printf("%#v", u)
	c.Ctx.WriteString("解析post请求数据成功!")
}

func (c *UserController) GetUser() {
	u := User{
		Username: "张三",
		Password: "121312",
		Hobby: []string{"1","2"},
	}
	c.Data["json"] = u
	c.ServeJSON()
}

models:数据库对象等

DbUser.go

package models

import (
	"fmt"
	"github.com/beego/beego/v2/client/orm"
	"time"

	//匿名引入mysql驱动
_ "github.com/go-sql-driver/mysql"
)

type User struct {
	Id   int    `orm:"auto"`
	Name string `orm:"column(name)"`
	Age  int    `orm:"column(age)"`
	Created time.Time `orm:"auto_now_add;type(datetime)"`
	Updated time.Time `orm:"auto_now;type(datetime)"`
}


var ORM orm.Ormer

func init() {
	// 注册 User 结构体模型
	orm.RegisterModel(new(User))
	orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3307)/beego?charset=utf8")
	orm.SetMaxIdleConns("default", 30)

	ORM = orm.NewOrm()
}

func Add() {
	user := new(User)
	user.Name = "贾元春"
	user.Age = 25
	// 添加数据
	ORM.Insert(user)
}


func Delete() {
	var user = User{Id: 7}
	c, er := ORM.Delete(&user)
	if er != nil {
		fmt.Println(er)
	}
	fmt.Println(c)
}

func Update() {
	user := User{Id: 6, Name: "贾宝玉", Age: 24}
	//默认通过id 更新所有字段
	c, er := ORM.Update(&user)
	if er != nil {
		fmt.Println(er)
	}
	fmt.Println(c)

	user2 := User{Id: 8, Name: "史湘云", Age: 22}
	//根据id做条件只更新name字段
	ORM.Update(&user2, "name")
}


func Find() User {
	//user := &User{Id: 8}
	//通过主键id 查询
	//o.Read(user)

	user := &User{Name: "贾宝玉"}
	//非主键查询
	ORM.Read(user, "Name")

	fmt.Println(user)

	return *user
}

routers:路由设置

router.go

package routers

import (
	"bee-project/controllers"
	beego "github.com/beego/beego/v2/server/web"
)

func init() {
    beego.Router("/", &controllers.MainController{})
    beego.Router("/hello", &controllers.HelloController{})

    // 默认是get请求
    beego.Router("/user", &controllers.UserController{})
    beego.Router("/user/add", &controllers.UserController{}, "get:AddUser")
    beego.Router("/user/doAdd", &controllers.UserController{}, "post:DoAddUser")

    // 用户
	beego.Router("/user/edit", &controllers.UserController{}, "get:EditUser")
	beego.Router("/user/doEdit", &controllers.UserController{}, "post:DoEditUser")
	beego.Router("/user/getUser", &controllers.UserController{}, "get:GetUser")

    // 商品 restful-api
	beego.Router("/goods", &controllers.GoodsController{})
	beego.Router("/goods", &controllers.GoodsController{}, "post:DoAdd")
	beego.Router("/goods", &controllers.GoodsController{}, "put:DoEdit")
	beego.Router("/goods", &controllers.GoodsController{}, "delete:DoDelete")

    // 操作数据库
	beego.Router("/dbUser", &controllers.DbUserController{})
	beego.Router("/dbUser", &controllers.DbUserController{}, "post:DoAdd")
	beego.Router("/dbUser", &controllers.DbUserController{}, "delete:DoDelete")
	beego.Router("/dbUser", &controllers.DbUserController{}, "put:DoUpdate")

}

static:静态文件、css、js、图片等

tests:测试文件

views:界面文件

goods.tpl

<!DOCTYPE html>

<html>
<head>
  <title>goods Beego</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
    <h1>商品模块</h1>
</body>
</html>

 hello.tpl

<!DOCTYPE html>

<html>
<head>
  <title>hello Beego</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
    <h1 class="logo">hello Beego</h1>
    <h2>{
  
  {.msg}}</h2>

</body>
</html>

index.tpl

<!DOCTYPE html>

<html>
<head>
  <title>Beego</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFNTdGOTA3OTczQTgxMUU0QTlEQUM0NEYyRkI1NEQxQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFNTdGOTA3QTczQTgxMUU0QTlEQUM0NEYyRkI1NEQxQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkU1N0Y5MDc3NzNBODExRTRBOURBQzQ0RjJGQjU0RDFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkU1N0Y5MDc4NzNBODExRTRBOURBQzQ0RjJGQjU0RDFCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+lsWdMwAAIvtJREFUeNrke3d8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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值