安装beego
1,由于在github上安装,所以需要安装git软件,安装过程一直点击下一步即可。安装完成后需要配置环境变量
修改go环境变量
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
2,设置GOPATH 环境变量,并且将 GOPATH/bin 加入到了环境变量。
3,安装bee
go get -u -v github.com/astaxie/beego
go get -u -v github.com/beego/bee
go install github.com/beego/bee/v2@latest 之后就有bee命令了
按照官网安装 http://beego.gocn.vip/beego/zh/developing/#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B
0 beego的启动流程
1 入口
package main
import (
//全局使用的路由和models _ 包名 会自动执行包下面的init函数,每个包只能有一个init函数
_ "studyDemo/models"
_ "studyDemo/routers"
beego "github.com/beego/beego/v2/server/web"
)
func main() {
beego.Run()
}
2 根据请求路由加载对应的控制器
前端get可以使用href
前端post使用表单
package routers
import (
beego "github.com/beego/beego/v2/server/web"
//导入控制器
"studyDemo/controllers"
)
/*路由与控制器请求方法*/
func init() {
beego.Router("/", &controllers.MainController{})
//路径-对应的控制器-控制器加载时的请求方式:请求调用的方法(可以有多个)
beego.Router("/DB", &controllers.DBController{}, "get:GetFunc;post:PostFunc")
}
3 控制器加载对应的view,以及数据处理操作
package controllers
import (
"github.com/beego/beego/v2/adapter/orm"
beego "github.com/beego/beego/v2/server/web"
"studyDemo/models"
)
/*定义控制器*/
type MainController struct {
beego.Controller
}
type DBController struct {
beego.Controller
}
/*控制器路由方法*/
func (c *MainController) Get() {
//传递数据给view
c.Data["Website"] = "beego.vip"
c.Data["Email"] = "astaxie@gmail.com"
//注册控制器对应的view
c.TplName = "test.tpl"
}
func (c *DBController) GetFunc() {
c.TplName = "test.tpl"
}
func (c *DBController) PostFunc() {
c.TplName = "index.tpl"
}
4 view的显示以及使用控制器传递的数据
//传递的数据在{{}}中使用.key
<h2>hello{{.Email}}<h2 \>
1 ORM框架 链接数据库
Beego中内嵌了ORM框架,用来操作数据库。那么ORM框架是什么呢?ORM框架是Object-RelationShipMapping的缩写,中文叫关系对象映射.可以不再使用sql语句可以操作数据库…通过操作对象来操作数据库.
1 数据库表的创建
数据库不能通过orm创建
表的创建在model
表的操作在控制器
package models
//导包
import (
"github.com/beego/beego/v2/adapter/orm"
_ "github.com/go-sql-driver/mysql"
)
// 要生成表的类,不要使用下划线定义属性_
type User struct {
Id int
Name string
PassWord string
}
func init() {
//获取数据库对象,
orm.RegisterDataBase("default", "mysql", "root@tcp(127.0.0.1:3306)/test?charset=utf8")
//根据结构体获取表结构表
orm.RegisterModel(new(User))
//生成表,一般放在model
orm.RunSyncdb("default", false, true)
//操作表,一般放在控制器
}
创建带约束的表
1 在数据库中创建表的时候,会给字段加很多限制属性,比如非空,长度,默认值等等,在ORM中,创建表时也可以给各个字段添加相应的限制。
2 要给哪个字段添加属性,需要在这个字段后面添加 `` 括起来的内容,格式为orm:“限制条件”。
type Article struct {
Id int `orm:"pk;auto"`
ArtiName string `orm:"size(20)"`
Atime time.Time `orm:"auto_now"`
Acount int `orm:"default(0);null"`
Acontent string `orm:"size(500)"`
Aimg string `orm:"size(100)"`
}
约束字段
限制条件 | 作用 |
---|---|
pk | 设置该字段为主键 |
auto | 这只该字段自增,但是要求该字段必须为整型 |
default(0) | 设置该字段的默认值,需要注意字段类型和默认值类型一致 |
size(100) | 设置该字段长度为100个字节,一般用来设置字符串类型 |
null | 设置该字段允许为空,默认不允许为空 |
unique | 设置该字段全局唯一 |
digits(12);decimals(4) | 设置浮点数位数和精度。比如这个是说,浮点数总共12位,小数位为四位。 |
auto_now | 针对时间类型字段,作用是保存数据的更新时间 |
auto_now_add | 针对时间类型字段,作用是保存数据的添加时间 |
注意:当模型定义里没有主键时,符合int, int32, int64, uint, uint32, uint64 类型且名称为 Id 的 Field 将被视为主键,能够自增. "
2 数据库表的基础操作(增删查改)
在控制器中操作
1 插入一条数据
//插入一条记录,需要一个记录对象变量,然后通过orm框架直接插入数据库,orm都是地址操作
var user models.User
user.Name = "tom"
user.PassWord = "123456"
orm := orm.NewOrm()
orm.Insert(&user)
2 查询数据
//定义对象,用于存储查询到的数据
var user models.User
//查询条件字段(where)
user.Id= 1
or := orm.NewOrm()
//查询结果保存到user,查询字段,返回查询到的第一个结果
//默认查询字段的的主键,可以不用指定查询字段
err := or.Read(&user, "Id")
if err != nil {
fmt.Println("fail-------", err)
return
}
c.Data["result"] = user
c.TplName = "test.tpl"
3 更新操作
需要先查询是否有数据,再进行更新
//更新操作
//查询对象是否存在
var user models.User
user.Id = 1
err := orm.NewOrm().Read(&user, "Id")
if err != nil {
fmt.Println("fail-------", err)
return
}
//更新对象数据
user.Name = "jack"
//不传递更新字段就全部更新
result, err := orm.NewOrm().Update(&user, "Name")
if err != nil {
fmt.Println("fail-------", err)
return
}
fmt.Println("success-------", result)
c.Data["result"] = user
c.TplName = "test.tpl"
4 删除一条数据
//删除一条数据
var user models.User
user.Id = 1
result, err := orm.NewOrm().Delete(&user)
if err != nil {
fmt.Println("fail-------", err)
return
}
fmt.Println("success-------", result)
c.Data["result"] = user
c.TplName = "test.tpl"
在路由的get或者post的方法中,获取数据
this.GetString():获取字符串类型值
this.GetInt():获取整型值
this.GetFloat:获取浮点型值
…
this.GetFile():获取上传的文件
作用:接收前端传递过来的数据,不管是get请求还是post请求,都能接收。
参数: 是传递数据的key值,一般情况下是form表单中 标签的name属性值
返回值:根据返回类型不同,返回值也不一样,最常用的GetString()只有一个返回值,如果没有取到值
就返回空字符串,其他几个函数会返回一个错误类型。获取的值一般是 标签
里面的value属性值。至于比较特殊的,我们用到的时候给大家做介绍。
知道了获取数据函数,我们就可以获取前端传递过来的数据啦。
userName := this.GetString("userName")
passwd := this.GetString("passwd")
3 页面之间的跳转
beego里面页面跳转的方式有两种,一种是重定向,一种是渲染。
1重定向
重定向用到的方法是 this.Redirect() 函数,有两个参数,第一个参数是请求路径,第二个参数是http状态码。
重定向的工作流程是:
1:当服务端向客户端响应 redirect后,并没有提供任何view数据进行渲染,仅仅是告诉浏览器响应为 redirect,以
及重定向的目标地址
2:浏览器收到服务端 redirect 过来的响应,会再次发起一个 http 请求
3:由于是浏览器再次发起了一个新的 http 请求,所以浏览器地址栏中的 url 会发生变化
4:浏览中最终得到的页面是最后这个 重定向的url 请求后的页面
5:所以redirect(“/register”,302) 相当于你在浏览器中手动输入 localhost/register文章来源:https://www.toymoban.com/news/detail-500665.html
2渲染
渲染就是控制期把一些数据传递给视图,然后视图用这些输出组织成html界面。所以不会再给浏览器发请求,是服
务器自己的行为,所以浏览器的地址栏不会改变,但是显示的页面可能会发生变化。用的函数是: this.TplName =
“login.html”文章来源地址https://www.toymoban.com/news/detail-500665.html
2 高级查询
1 获取全部数据
o := orm.NewOrm()
qs := o.QueryTable("article")
var articles []models.Article
_, err := qs.All(&articles)
if err != nil {
c.Data["errmsg"] = "查询数据错误"
c.TplName = "add.html"
}
c.Data["articles"] = articles
2 分页数据获取
//展示文章列表页
func(this*ArticleController)ShowArticleList(){
//获取数据
//高级查询
//指定表
o := orm.NewOrm()
qs := o.QueryTable("Article")//queryseter
var articles []models.Article
//查询总记录数
count,_ := qs.Count()
//获取总页数
pageSize := 2
pageCount := math.Ceil(float64(count) / float64(pageSize))
//获取页码
pageIndex,err:= this.GetInt("pageIndex")
if err != nil{
pageIndex = 1
}
//获取数据
//作用就是获取数据库部分数据,第一个参数,获取几条,第二个参数,从那条数据开始获取,返回值还是querySeter
//起始位置计算
start := (pageIndex - 1)*pageSize
qs.Limit(pageSize,start).All(&articles)
//传递数据
this.Data["pageIndex"] = pageIndex
this.Data["pageCount"] = int(pageCount)
this.Data["count"] = count
this.Data["articles"] = articles
this.TplName = "index.html"
}
到了这里,关于【1 beego学习 -MAC框架与ORM数据库】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!