第二课 Beego仿优酷-go环境安装和Beego框架基础

第二课 Beego仿优酷-go环境安装和Beego框架基础

tags:

  • Beego
  • 慕课网

categories:

  • go环境安装
  • Beego框架

文章目录

  • 第二课 Beego仿优酷-go环境安装和Beego框架基础
    • 第一节 Beego框架安装
      • 1.1 Beego框架介绍
      • 1.2 Go开发环境搭建
      • 1.3 Beego安装
      • 1.4 bee命令的基本使用
    • 第二节 Beego框架路由和配置
      • 2.1 hello world基本路由
      • 2.2 注解路由
      • 2.3 Beego过滤器的实现
      • 2.4 Beego参数配置
    • 第三节 Beego view的基础
      • 3.1 Beego view常用语句
      • 3.2 Beego view简单使用
    • 第四节 Beego数据库ORM操作
      • 4.1 orm配置操作
      • 4.2 数据库操作-查询
      • 4.3 数据库操作-插入
      • 4.4 数据库操作-修改
      • 4.5 数据库操作-删除
    • 第五节 Beego数据库原生SQL操作
      • 5.1 通过原生sql进行查询
      • 5.2 通过原生sql进行插入
      • 5.3 通过原生sql进行修改
      • 5.4 通过原生sql进行删除
      • 5.5 通过原生sql获取用户列表

第一节 Beego框架安装

1.1 Beego框架介绍

  1. 官方网站:https://beego.me/

1.2 Go开发环境搭建

  1. GOROOT,就是GO的安装路径
  2. GOPATH,就是工作目录,包含src,pkg,bin文件夹。这里设置为goRoot目录
  3. 注意:不要把gopath设置成安装目录
  4. 下载地址:https://studygolang.com/dl 。下载Go的安装文件,mac和win系统直接安装,linux解压
# 测试是否完成
go version
go env

1.3 Beego安装

  1. Beego安装是典型的go安装包安装,安装命令: go get github.com/astaxie/beego
  2. bee工具是一个为了协助快速开发beego项目而创建的项目
  3. go get github.com/beego/bee
  4. bee可执行文件默认存放在 G O P A T H / b i n 里 面 , 所 以 您 需 要 把 GOPATH/bin里面,所以您需要把 GOPATH/binGOPATH/bin添加到您的环境变量。直接手动维护
# 手动下载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
  1. 使用go mod 方式安装beego和bee
# 首先修改环境变量 可以右键电脑创建键值对
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

1.4 bee命令的基本使用

  1. bee new 创建一个新的beego项目
  2. bee api 如果项目只是提供api服务的话可以用这个, 它不会创建static和views目录
  3. bee run 运行beego用来调试
  4. bee pack 上线时用来打包beego文件的 打包完的文件在bin. 注意: bee pack -be GOOS=linux (mac下打包的项目,liunx下不能直接用)
  5. 测试一下
bee new demo
# 进入到demo目录下
cd src/demo
# 如果运行出错看下目录对不对呀
bee run  
# 访问http://localhost:8080/

第二节 Beego框架路由和配置

2.1 hello world基本路由

  1. controllers\default.go 下新建一个函数。
// 浏览器中输出helloword
func (c *MainController) GetHello(){
	var(
		 title string
	)
	title = "hello world"
	c.Ctx.WriteString(title)
}
  1. routers\router.go 下新建一个路由。
// "get:GetHello" 如果不加这个参数,默认访问get函数
beego.Router("/hello", &controllers.MainController{}, "get:GetHello")

2.2 注解路由

  1. 在文件夹controllers中新建一个demo.go的文件。
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)
}
  1. routers\router.go添加注解路由。
beego.Include(&controllers.DemoController{})

第二课 Beego仿优酷-go环境安装和Beego框架基础_第1张图片
3. 重新运行一下。访问一下http://127.0.0.1:8080/demo/hello
4. Beego的MVC和其它语言的mvc开发模式是一样的,对应文件夹:controllers、models、views

2.3 Beego过滤器的实现

  1. 过滤器有哪些作用?
    • 安全验证,例如:IP屏蔽,token验证,访问地址屏蔽
    • beego.InsertFilter(pattern string, postion int, filter FilterFunc, skip…bool)
  2. 实现一个过滤器。访问之前http://127.0.0.1:8080/demo/hello ,会自动输出跳转函数中的输出。
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)
}

2.4 Beego参数配置

  1. 参数配置在demo/conf/app.conf
  2. 不同环境的配置用[]区分
appname = demo
httpport = 8080
runmode = dev

[dev]
apiurl = 127.0.0.1:8081

[prod]
apiurl = 127.0.0.1:8082

第三节 Beego view的基础

3.1 Beego view常用语句

  1. if…else…end
  2. range
  3. eq \ ne \lt \le \ gt \ ge
  4. template (继承头部和尾部)
  5. 静态资源
  6. 如果想自定义静态文件的地址。在main.go的入口文件。
package main

import (
	_ "demo/routers"

	"github.com/astaxie/beego"
)

func main() {
	// 自定义静态文件目录第一个参数是路由
	beego.SetStaticPath("/download", "download")
	beego.Run()
}

3.2 Beego view简单使用

  1. index.tpl模板文件。修改一些东西。
    • 注意引入模板时, 如果引入的模板有变量需要在最后加 "."

  

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" .}}
  1. footer.tpl

  1. 修改控制器函数。default.go
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"
}

第四节 Beego数据库ORM操作

4.1 orm配置操作

  1. 在关系型数据库和对象之间作一个映射,在操作数据库时,不需要写复杂的SQL语句,只需要像操作对象一样。
      1. 下包:go get github.com/astaxie/beego/orm
  2. 引入
// 1. 引入orm包
"github.com/astaxie/beego/orm"
// 2. 操作数据库的包
 _ "github.com/go-sql-driver/mysql"
  1. 配置文件中链接数据库
    • orm必须给mysql注册一个别名为default的数据库作为默认使用,否则编译会报错
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()
}

4.2 数据库操作-查询

  1. demo.go中写一个函数。GetUsername
// 通过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)

}
  1. models.go下写User.go文件。访问路由http://127.0.0.1:8080/user/username?id=1
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
}

4.3 数据库操作-插入

  1. demo.go中写一个函数。Save

// 实现用户注册功能
// @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)
}
  1. models.go下加一个保存函数。访问路由http://127.0.0.1:8080/user/save?name=test1&mobile=1801112222&avatar=我是头像
// 保存用户
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
}

4.4 数据库操作-修改

  1. demo.go中写一个函数。
// 实现修改用户名
// @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)
}
  1. models.go下加一个保存函数。访问路由http://127.0.0.1:8080/user/updateusername?id=2&name=test13214
// 更新用户名
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
}

4.5 数据库操作-删除

  1. demo.go中写一个函数。
// 实现修改用户名
// @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)
}
  1. models.go下加一个保存函数。访问路由http://127.0.0.1:8080/user/delete?id=2
// 删除用户
func Delete(id int) error {
	var (
		user User
		err  error
	)
	o := orm.NewOrm()
	user = User{Id: id}
	_, err = o.Delete(&user)
	return err
}

第五节 Beego数据库原生SQL操作

5.1 通过原生sql进行查询

  1. demo.go中写一个函数。
// 通过原生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)
}
  1. http://127.0.0.1:8080/sql/user/userinfo?id=1

//通过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
}

5.2 通过原生sql进行插入

  1. demo.go中写一个函数。Save
// 实现原生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)
}
  1. models.go下加一个保存函数。访问路由http://127.0.0.1:8080/sql/user/save?name=test1&mobile=1801112222&avatar=我是头像
// 通过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
}

5.3 通过原生sql进行修改

  1. demo.go中写一个函数。
// 通过原生方式修改用户名
// @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)
}
  1. models.go下加一个保存函数。访问路由http://127.0.0.1:8080/sql/user/updatename?id=3&name=test13214
// 原生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
}

5.4 通过原生sql进行删除

  1. demo.go中写一个函数。
// 通过原生方式删除用户
// @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)
}
  1. models.go下加一个保存函数。访问路由http://127.0.0.1:8080/sql/user/delete?id=3
// 原生sql删除用户
func SqlDelete(id int) error {
	var (
		err error
	)
	o := orm.NewOrm()
	_, err = o.Raw("DELETE FROM user WHERE id=?", id).Exec()
	return err
}

5.5 通过原生sql获取用户列表

  1. demo.go中写一个函数。
// 原生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)
}
  1. models.go下加一个保存函数。访问路由http://127.0.0.1:8080/sql/user/delete?id=3
// 原生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
}
``

你可能感兴趣的:(Beego仿优酷)