beego(一)---基础知识

924 阅读2分钟

安装bee工具

安装

go get github.com/beego/bee

验证是否安装成功

cmd 
bee

image.png

创建beego项目

初始化项目

bee new beegodemo01

生成go mod配置文件

go mod init beegodemo01

image.png

运行项目

bee run

项目文件结构

image.png

新增一个goods路由

controllers

// controllers/goods.go

package controllers

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

type GoodsController struct {
	beego.Controller
}

func (c *GoodsController) Get() {
	c.Data["Website"] = "beego.me"
	c.Data["Email"] = "astaxie@gmail.com"
	c.TplName = "goods.tpl"
}

router

//routers/router.go

package routers

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

func init() {
    beego.Router("/", &controllers.MainController{})
	beego.Router("/goods", &controllers.GoodsController{})
}

view

//views/goods.tpl

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <p>goods</p>
</body>

</html>

get传参

// routers/router.go

beego.Router("/article/edit", &controllers.ArticleController{},"get:EditArticle")
// controllers/article.go
func (c *ArticleController) EditArticle() {
	// 获取get传值
	id := c.GetString("id")
	c.Ctx.WriteString("修改新闻--"+id)
}

image.png

post 传值

router

// routers/router.go

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

controllers

//controllers/user.go

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

type User struct {
	Username string `form:"username" json:"username"`
	Password string `form:"password" json:"password"`
	Hobby []string `form:"hobby" json:"h"`
}
func (c *UserController) DoEditUser() {
	u := User{}
	if err := c.ParseForm(&u); err != nil{
		c.Ctx.WriteString("post提交失败")
		return
	}
	fmt.Printf("%#v",u)
	c.Ctx.WriteString("解析post数据成功")
}

view

// views/userEdit.html

    <form action="/user/doEdit" method="post">
        <div>
            <span>id</span>
            <input type="text" name='id'>
        </div>
        <div>
            <span>用户名</span>
            <input type="text" name='username'>
        </div>
        <div>
            <span>密码</span>
            <input type="password" name="password">
        </div>
        <div>
            <span>爱好</span>

            <input type="checkbox" value=1 id='label1' name='hobby'><label for='lable1'>吃饭</label>
            <input type="checkbox" value=2 id='label2' name='hobby'><label for='lable2'>睡觉</label>
            <input type="checkbox" value=3 id='label3' name='hobby'><label for='lable3'>打豆豆</label>
        </div>
        <input type="submit" value='提交'>
    </form>

image.png

image.png

返回json数据

router

//routers/router.go

	beego.Router("/user/getUser", &controllers.UserController{},"get:GetUser")

controllers

//controllers/user.go

type User struct {
	Username string `form:"username" json:"username"`
	Password string `form:"password" json:"password"`
	Hobby []string `form:"hobby" json:"h"`
}

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

map 的值实现空接口

	c.Data["json"] = map[string]interface{}{"code":500,"msg":"评论出错,请重试"}
	c.ServeJSON()

config配置

配置文件设置,获取

// conf/app.conf

mysqluser = "aaa"
admin ="admin","lisi"
// controllers/default.go
	mysqluser,err := beego.AppConfig.String("mysqluser")
	if err != nil{
		return
	}
	fmt.Print(mysqluser)
	admin,err := beego.AppConfig.Strings("admin")
	if err != nil{
		return
	}
	fmt.Printf("%v %T",admin,admin)

set get

	beego.AppConfig.Set("redisuser","admin666")
	redisuser,err := beego.AppConfig.String("redisuser")
	if err != nil{
		return
	}
	fmt.Print(redisuser)

cookie

// controllers/default.go

c.Ctx.SetCookie("username","aa")
// controllers/goods.go
username := c.Ctx.GetCookie("username")
c.Data["username"] = username

日志log

beego1.x有beego.ingo,2.0没有

main方法

// main.go

package main

import (
	_ "beegodemo01/routers"
	beego "github.com/beego/beego/v2/server/web"
	"github.com/beego/beego/v2/core/logs"
	"fmt"
)

func main() {
	logs.Info("hello, world-------11")
	logs.SetLogger("file",`{"filename":"logs/test.log"}`)
	beego.Run()
}

日志文件

//  logs/test.log

image.png

文件上传

router

// routers/router.go
beego.Router("/upload", &controllers.UploadController{})
beego.Router("/upload/doUpload", &controllers.UploadController{},"post:DoUpload")

controllers

// controllers/upload.go
import (
	beego "github.com/beego/beego/v2/server/web"
	"fmt"
	"time"
)

func (u *UploadController) DoUpload() {
		// 获取上传的文件
		f,h,_ := u.GetFile("file")

		defer f.Close()
		fmt.Println(h.Filename)
	
		// 保存上传的文件
	
		time_unix := time.Now().Unix()
		fmt.Println(time_unix)
	
		file_path := fmt.Sprintf("%d_%s",time_cnix,h.Filename)
		u.SaveToFile("file","upload/"+file_path)
		//u.Ctx.WriteString("上传成功")
	
		u.Data["json"] = map[string]interface{}{"code":200,"msg":"上传成功"}
		u.ServeJSON()
}

views

// html

    <form action="/upload/doUpload" method="post" enctype="multipart/form-data">
        <input type="file" name="file"> <br>
        <input type="submit" value="上传">
    </form>
//ajax

    <form>
        <input type="file" id="upload_file"> <br>
        <input type="button" value="上传1" id="btn">
    </form>
    <script>
        var btn = document.getElementById("btn");
        btn.onclick = function (ev) {
            var formdata = new FormData();
            console.log($("#upload_file"));
            formdata.append("file", $("#upload_file")[0].files[0]);

            $.ajax({
                url: "/upload/doUpload",
                type: "POST",
                data: formdata,
                contentType: false,
                processData: false,
                success: function (data) {
                    alert(data["msg"])
                },
                fail: function (data) {
                }
            })
        }
    </script>

存放的文件夹

// upload

image.png

beego 更换版本

在根目录go.mod中设置

image.png