tags:
categories:
# 测试是否完成
go version
go env
# 手动下载bee https://github.com/beego/bee/releases
# 复制执行文件到gopath的bin目录下,配置环境变量
bee version
# 不用go Mod 才可以版本控制
go env -w GO111MODULE=off
# 手动下载beego 1.9.0版本到目录下gopath下的src\github.com\astaxie\beego
# 进入该目录下执行go install
bee version
# 首先修改环境变量 可以右键电脑创建键值对
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go env
# 这里就可以进行版本管理了
go get -u github.com/astaxie/beego
go get -u github.com/beego/bee
# bin目录,配置环境变量 然后到src下
bee new myproject
cd myproject
# 这里注意多了个.mod的文件 就是用来管理版本的
go mod init myproject
# 运行项目
bee run
bee new demo
# 进入到demo目录下
cd src/demo
# 如果运行出错看下目录对不对呀
bee run
# 访问http://localhost:8080/
// 浏览器中输出helloword
func (c *MainController) GetHello(){
var(
title string
)
title = "hello world"
c.Ctx.WriteString(title)
}
// "get:GetHello" 如果不加这个参数,默认访问get函数
beego.Router("/hello", &controllers.MainController{}, "get:GetHello")
package controllers
import "github.com/astaxie/beego"
type DemoController struct {
beego.Controller
}
// @router /demo/hello [GET]
func (this *DemoController) GetHello() {
var (
title string
)
title = "hello world!"
this.Ctx.WriteString(title)
}
beego.Include(&controllers.DemoController{})
3. 重新运行一下。访问一下http://127.0.0.1:8080/demo/hello
4. Beego的MVC和其它语言的mvc开发模式是一样的,对应文件夹:controllers、models、views
package routers
import (
"demo/controllers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/context"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/hello", &controllers.MainController{}, "get:GetHello")
beego.Include(&controllers.DemoController{})
var FilterDemo = func(ctx *context.Context) {
var (
title string
)
title = "禁止访问"
ctx.WriteString(title)
}
// 如果有/demo/*就禁止, 在BeforeRouter路由之前执行FilerDemo函数
beego.InsertFilter("/demo/*", beego.BeforeRouter, FilterDemo)
}
appname = demo
httpport = 8080
runmode = dev
[dev]
apiurl = 127.0.0.1:8081
[prod]
apiurl = 127.0.0.1:8082
package main
import (
_ "demo/routers"
"github.com/astaxie/beego"
)
func main() {
// 自定义静态文件目录第一个参数是路由
beego.SetStaticPath("/download", "download")
beego.Run()
}
Welcome to Beego
Beego is a simple & powerful Go web framework which is inspired by tornado and sinatra.
{{range $index, $value := .Pages}}
{{$index}} - {{$value.Num}} of {{$.Website}}
{{end}}
{{template "footer.tpl" .}}
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.Data["IsEmail"] = 0
pages := []struct {
Num int
}{{10}, {20}, {30}}
c.Data["Pages"] = pages
c.TplName = "index.tpl"
}
// 1. 引入orm包
"github.com/astaxie/beego/orm"
// 2. 操作数据库的包
_ "github.com/go-sql-driver/mysql"
package main
import (
_ "demo/routers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func main() {
defaultdb := beego.AppConfig.String("defaultdb")
orm.RegisterDriver("mysql", orm.DRMySQL)
// 这里注意下orm必须给mysql注册一个别名为default的数据库作为默认使用,否则编译会报错
orm.RegisterDataBase("default", "mysql", defaultdb)
beego.Run()
}
// 通过id获取用户名
// @router /user/username [get]
func (this *DemoController) GetUsername() {
var (
id int
err error
title string
name string
user models.User
)
// 接收浏览器中的参数
id, err = this.GetInt("id")
user, err = models.UserInfo(id)
if err == nil {
name = user.Name
title = name
} else {
title = "抱歉,服务器走丢了"
}
this.Ctx.WriteString(title)
}
package models
import "github.com/astaxie/beego/orm"
type User struct {
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
func init() {
orm.RegisterModel(new(User))
}
// 获取用户信息
func UserInfo(id int) (User, error) {
var (
err error
)
o := orm.NewOrm()
user := User{Id: id}
err = o.Read(&user)
return user, err
}
// 实现用户注册功能
// @router /user/save [get]
func (this *DemoController) Save() {
var (
name string
mobile string
avatar string
err error
title string
)
// 接收浏览器中的参数
name = this.GetString("name")
mobile = this.GetString("mobile")
avatar = this.GetString("avatar")
err = models.Save(name, mobile, avatar)
if err == nil {
title = "恭喜, 保存成功"
} else {
title = "服务器走丢了"
}
this.Ctx.WriteString(title)
}
// 保存用户
func Save(name string, mobile string, avatar string) error {
var (
err error
user User
)
o := orm.NewOrm()
user.Name = name
user.Mobile = mobile
user.Avatar = avatar
user.Status = 0
_, err = o.Insert(&user)
return err
}
// 实现修改用户名
// @router /user/updateusername [get]
func (this *DemoController) UpdateUsername() {
var (
id int
title string
name string
err error
)
// 接收浏览器中的参数
id, err = this.GetInt("id")
name = this.GetString("name")
err = models.UpdateUsername(id, name)
if err == nil {
title = "恭喜修改名字成功"
} else {
title = "抱歉,服务器走丢了"
}
this.Ctx.WriteString(title)
}
// 更新用户名
func UpdateUsername(id int, name string) error {
var (
user User
err error
)
o := orm.NewOrm()
user = User{Id: id}
if o.Read(&user) == nil {
user.Name = name
_, err = o.Update(&user)
}
return err
}
// 实现修改用户名
// @router /user/delete [get]
func (this *DemoController) Delete() {
var (
id int
err error
title string
)
// 接收浏览器中的参数
id, err = this.GetInt("id")
err = models.Delete(id)
if err == nil {
title = "恭喜,删除数据成功"
} else {
title = "抱歉,服务器走丢了"
}
this.Ctx.WriteString(title)
}
// 删除用户
func Delete(id int) error {
var (
user User
err error
)
o := orm.NewOrm()
user = User{Id: id}
_, err = o.Delete(&user)
return err
}
// 通过原生sql方式获取用户信息
// @router /sql/user/userinfo [get]
func (this *DemoController) SqlUserInfo() {
var (
id int
err error
title string
user models.User
)
id, err = this.GetInt("id")
user, err = models.SqlUserInfo(id)
if err == nil {
title = "用户名: " + user.Name + "手机号:" + user.Mobile
} else {
title = "抱歉,服务器走丢了"
}
this.Ctx.WriteString(title)
}
//通过sql获取用户信息
func SqlUserInfo(id int) (User, error) {
var (
user User
err error
)
o := orm.NewOrm()
// 传入变量时一定要用?可以防止sql注入, +拼接的方式不安全会被攻击的
err = o.Raw("SELECT `name`, `mobile` FROM user Where id=? LIMIT 1", id).QueryRow(&user)
return user, err
}
// 实现原生sql保存用户
// @router /sql/user/save [get]
func (this *DemoController) SqlSave() {
var (
err error
title string
name string
mobile string
avatar string
)
// 接收浏览器中的参数
name = this.GetString("name")
mobile = this.GetString("mobile")
avatar = this.GetString("avatar")
err = models.SqlSave(name, mobile, avatar)
if err == nil {
title = "恭喜, 保存成功"
} else {
title = "服务器走丢了"
}
this.Ctx.WriteString(title)
}
// 通过sql保存用户
func SqlSave(name string, mobile string, avatar string) error {
var (
err error
user User
)
o := orm.NewOrm()
user.Name = name
user.Mobile = mobile
user.Avatar = avatar
user.Status = 0
_, err = o.Raw("INSERT INTO user (`name`, `mobile`, `avatar`, `status`) VALUES (?, ?, ?, ?)", name, mobile, avatar, 0).Exec()
return err
}
// 通过原生方式修改用户名
// @router /sql/user/updatename [get]
func (this *DemoController) SqlUpdateUsername() {
var (
id int
title string
name string
err error
)
// 接收浏览器中的参数
id, err = this.GetInt("id")
name = this.GetString("name")
err = models.SqlUpdateUserName(id, name)
if err == nil {
title = "恭喜修改名字成功"
} else {
title = "抱歉,服务器走丢了"
}
this.Ctx.WriteString(title)
}
// 原生sql修改用户名
func SqlUpdateUserName(id int, name string) error {
var (
err error
)
o := orm.NewOrm()
_, err = o.Raw("UPDATE user SET name=? WHERE id=?", name, id).Exec()
return err
}
// 通过原生方式删除用户
// @router /sql/user/delete [get]
func (this *DemoController) SqlDelete() {
var (
id int
err error
title string
)
// 接收浏览器中的参数
id, err = this.GetInt("id")
err = models.SqlDelete(id)
if err == nil {
title = "恭喜,删除数据成功"
} else {
title = "抱歉,服务器走丢了"
}
this.Ctx.WriteString(title)
}
// 原生sql删除用户
func SqlDelete(id int) error {
var (
err error
)
o := orm.NewOrm()
_, err = o.Raw("DELETE FROM user WHERE id=?", id).Exec()
return err
}
// 原生sql获取用户列表
// @router /sql/user/list [get]
func (this *DemoController) SqlList() {
var (
err error
title string
users []models.User
)
_, users, err = models.SqlList()
if err == nil {
for _, v := range users {
title += v.Name + ","
}
} else {
title = "抱歉,服务器走丢了"
}
this.Ctx.WriteString(title)
}
// 原生sql实现获取用户列表
func SqlList() (int64, []User, error) {
var (
users []User
)
o := orm.NewOrm()
num, err := o.Raw("SELECT * FROM user WHERE id > ? ORDER BY id DESC LIMIT 2", 0).QueryRows(&users)
return num, users, err
}
``