bee介绍
官网地址:https://beego.gocn.vip/beego/zh/developing/web/
安装bee
1、创建一个新项目
2、右键项目名,创建go.mod
3、项目命令行中输入 go get -u github.com/beego/bee/v2@master 下载工具 (如果拉不下来就配置goproxy,有些电脑必须配了才能拉)
4、在本机bee目录下,cmd执行go build -o bee.exe (如果执行报错,就找其他人要一个bee.exe)
我的目录在“D:\environment\GoWorks\pkg\mod\github.com\beego\bee\v2@v2.0.4”
5、将生成的bee.exe文件剪切到bin 目录下
6、在环境变量path里设置这个路径
7、在cmd中执行bee version查看是否安装成功
创建项目
分为web应用和api应用
web
命令行执行bee new <项目名> 就会生成web 项目
cd到项目路径下
使用go mod tidy整理项目中的依赖
使用 go mod download下载项目中的依赖
运行main.go,或者命令行 bee run / go run进行运行
浏览器访问
api
使用 bee api <项目名创建代码>
cd到项目路径下
使用go mod tidy整理项目中的依赖
使用 go mod download下载项目中的依赖
运行main.go,或者命令行 bee run / go run进行运行
由于没有配置静态页面 返回如上界面
运行时bee run -gendoc=true -downdoc=true下载Swagger,仅第一次会下载。
路由
在controllers目录下,创建路由地址
package controllers
import "github.com/beego/beego/v2/server/web"
type UserController struct { //创建User控制器,可以理解为一级目录,访问的时候是/user
web.Controller
}
// 创建2级目录,User类下对应的方法,方法不能有参数,不能有返回值,方法名必须大写
func (u *UserController) Hello() { //localhost:8080/user/hello
u.Ctx.WriteString("user/hello")
}
func (u *UserController) Login() { //localhost:8080/user/login
u.Ctx.WriteString("user/login")
}
在router下注册路由
package routers
import (
beego "github.com/beego/beego/v2/server/web"
"web-demo/controllers"
)
func init() {
//自动注册路由,将contros目录下的UserController注册上来
beego.AutoRouter(&controllers.UserController{})
//首页的路由
beego.Router("/", &controllers.MainController{})
}
手动路由
beego.Get("/", func(ctx *context.Context) {
})
restful风格路由
处理表单请求
首先在views下创建一个前端页面用来提交表单。
然后在controller中写2个方法
由于是post请求,需要在router中设置post路由(我试着不用post路由,用自动注册的,目前页没问题)
beego.Router("/user/login2", &controllers.UserController{}, "post:Login2")
错误处理
重定向,如果输入的username不是admin就重定向到登录页面。如果重定向,重定向后面的内容不会执行。
或者在router,写一个原生的错误处理,记得在views下添加错误页面。
第三种是创建一个errorController
根据官网提供的代码,创建一个error.go,代码复制上去
package controllers
import (
"github.com/beego/beego/v2/server/web"
)
type ErrorController struct {
web.Controller
}
func (c *ErrorController) Error404() {
c.Data["content"] = "page not found"
c.TplName = "404.tpl"
}
func (c *ErrorController) Error501() {
c.Data["content"] = "server error"
c.TplName = "501.tpl"
}
func (c *ErrorController) ErrorDb() {
c.Data["content"] = "database is now down"
c.TplName = "dberror.tpl"
}
在router中注册路由
beego.ErrorController(&controllers.ErrorController{})
原生错误路由与errorController同时存在的话,优先执行errorController
Admin管理后台
默认是关闭的,需要手动配置开启,
conf中配置
EnableAdmin = true
AdminAddr = “localhost”
AdminPort = 8088
打开浏览器,输入 URL:http://localhost:8088/,你会看到一句欢迎词:Welcome to Admin Dashboard
请求统计信息
访问统计的 URL 地址 http://localhost:8088/qps
定时任务
用户需要在应用中添加了 定时任务,才能执行相应的任务检查和手工触发任务。
检查任务状态 URL:http://localhost:8088/task
手工执行任务 URL:http://localhost:8088/task?taskname=任务名
配置信息
应用开发完毕之后,我们可能需要知道在运行的进程到底是怎么样的配置,beego 的监控模块提供了这一功能。
显示所有的配置信息: http://localhost:8088/listconf?command=conf
显示所有的路由配置信息: http://localhost:8088/listconf?command=router
显示所有的过滤设置信息: http://localhost:8088/listconf?command=filter
Session 、Cookie
在app.conf中开启session
sessionon = true
写一个设置session的方法,并且前端可以获取到方法中的计数器num
func (this *UserController) SessionUser() {
//设置一个cookie
this.Ctx.SetCookie("name", "web cookie", 10)
//设置一个加密cookie
//this.Ctx.SetSecureCookie("my-secret", "name", "web cookie")
v := this.GetSession("asta")
if v == nil {
this.SetSession("asta", int(1))
this.Data["num"] = 0
} else {
this.SetSession("asta", v.(int)+1)
this.Data["num"] = v.(int)
}
this.TplName = "index.tpl"
}
定时任务
ORM
在models里创建orm文件,并写init方法
在main里导入orm的init
package models
import (
"github.com/beego/beego/v2/client/orm"
// don't forget this
_ "github.com/go-sql-driver/mysql"
)
func init() {
//开启日志
orm.Debug = true
//同步结构体到表中
orm.RegisterModel(new(User))
//连接数据库
orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1:3306)/beego?charset=utf8")
orm.RunSyncdb("default", false, true)
}
在models里写对象与数据库映射
package models
import (
"fmt"
"github.com/beego/beego/v2/client/orm"
"time"
)
type User struct {
//创建字段与列进行映射
Id int `orm:"column(id);auto"`
Name string `orm:"column(name);"`
Email string `orm:"column(email);"`
Create time.Time `orm:"column(create_time);auto_now_add;type(datetime)"`
UpdateTime time.Time `orm:"column(update_time);auto_now;type(datetime)"`
}
func UserInsert(user *User) int64 {
//创建orm对象
o := orm.NewOrm()
//插入user
n, _ := o.Insert(user)
//o.Delete()
//o.Update()
//o.Read()
if n > 0 {
fmt.Println("数据插入成功")
return n
}
return 0
}
在controller里写方法
package controllers
import (
"github.com/beego/beego/v2/server/web"
"web-demo/models"
)
type UserController struct {
web.Controller
}
func (u *UserController) Name() {
//生成结构体指针对象
user := new(models.User)
user.Name = "zhangsan"
user.Email = "1@qq.com"
//业务
n := models.UserInsert(user)
if n == 0 {
u.Ctx.WriteString("插入失败")
} else {
u.Ctx.WriteString("插入成功")
}
}