安裝beego
1,由于在github上安裝,所以需要安裝git軟件,安裝過程一直點擊下一步即可。安裝完成后需要配置環(huán)境變量
修改go環(huán)境變量
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
2,設置GOPATH 環(huán)境變量,并且將 GOPATH/bin 加入到了環(huán)境變量。
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命令了
按照官網(wǎng)安裝 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 _ 包名 會自動執(zhí)行包下面的init函數(shù),每個包只能有一個init函數(shù)
_ "studyDemo/models"
_ "studyDemo/routers"
beego "github.com/beego/beego/v2/server/web"
)
func main() {
beego.Run()
}
2 根據(jù)請求路由加載對應的控制器
前端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,以及數(shù)據(jù)處理操作
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() {
//傳遞數(shù)據(jù)給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的顯示以及使用控制器傳遞的數(shù)據(jù)
//傳遞的數(shù)據(jù)在{{}}中使用.key
<h2>hello{{.Email}}<h2 \>
1 ORM框架 鏈接數(shù)據(jù)庫
Beego中內嵌了ORM框架,用來操作數(shù)據(jù)庫。那么ORM框架是什么呢?ORM框架是Object-RelationShipMapping的縮寫,中文叫關系對象映射.可以不再使用sql語句可以操作數(shù)據(jù)庫…通過操作對象來操作數(shù)據(jù)庫.
1 數(shù)據(jù)庫表的創(chuàng)建
數(shù)據(jù)庫不能通過orm創(chuàng)建
表的創(chuàng)建在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() {
//獲取數(shù)據(jù)庫對象,
orm.RegisterDataBase("default", "mysql", "root@tcp(127.0.0.1:3306)/test?charset=utf8")
//根據(jù)結構體獲取表結構表
orm.RegisterModel(new(User))
//生成表,一般放在model
orm.RunSyncdb("default", false, true)
//操作表,一般放在控制器
}
創(chuàng)建帶約束的表
1 在數(shù)據(jù)庫中創(chuàng)建表的時候,會給字段加很多限制屬性,比如非空,長度,默認值等等,在ORM中,創(chuàng)建表時也可以給各個字段添加相應的限制。
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個字節(jié),一般用來設置字符串類型 |
null | 設置該字段允許為空,默認不允許為空 |
unique | 設置該字段全局唯一 |
digits(12);decimals(4) | 設置浮點數(shù)位數(shù)和精度。比如這個是說,浮點數(shù)總共12位,小數(shù)位為四位。 |
auto_now | 針對時間類型字段,作用是保存數(shù)據(jù)的更新時間 |
auto_now_add | 針對時間類型字段,作用是保存數(shù)據(jù)的添加時間 |
注意:當模型定義里沒有主鍵時,符合int, int32, int64, uint, uint32, uint64 類型且名稱為 Id 的 Field 將被視為主鍵,能夠自增. "
2 數(shù)據(jù)庫表的基礎操作(增刪查改)
在控制器中操作
1 插入一條數(shù)據(jù)
//插入一條記錄,需要一個記錄對象變量,然后通過orm框架直接插入數(shù)據(jù)庫,orm都是地址操作
var user models.User
user.Name = "tom"
user.PassWord = "123456"
orm := orm.NewOrm()
orm.Insert(&user)
2 查詢數(shù)據(jù)
//定義對象,用于存儲查詢到的數(shù)據(jù)
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 更新操作
需要先查詢是否有數(shù)據(jù),再進行更新
//更新操作
//查詢對象是否存在
var user models.User
user.Id = 1
err := orm.NewOrm().Read(&user, "Id")
if err != nil {
fmt.Println("fail-------", err)
return
}
//更新對象數(shù)據(jù)
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 刪除一條數(shù)據(jù)
//刪除一條數(shù)據(jù)
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的方法中,獲取數(shù)據(jù)
this.GetString():獲取字符串類型值
this.GetInt():獲取整型值
this.GetFloat:獲取浮點型值
…
this.GetFile():獲取上傳的文件
作用:接收前端傳遞過來的數(shù)據(jù),不管是get請求還是post請求,都能接收。
參數(shù): 是傳遞數(shù)據(jù)的key值,一般情況下是form表單中 標簽的name屬性值
返回值:根據(jù)返回類型不同,返回值也不一樣,最常用的GetString()只有一個返回值,如果沒有取到值
就返回空字符串,其他幾個函數(shù)會返回一個錯誤類型。獲取的值一般是 標簽
里面的value屬性值。至于比較特殊的,我們用到的時候給大家做介紹。
知道了獲取數(shù)據(jù)函數(shù),我們就可以獲取前端傳遞過來的數(shù)據(jù)啦。
userName := this.GetString("userName")
passwd := this.GetString("passwd")
3 頁面之間的跳轉
beego里面頁面跳轉的方式有兩種,一種是重定向,一種是渲染。
1重定向
重定向用到的方法是 this.Redirect() 函數(shù),有兩個參數(shù),第一個參數(shù)是請求路徑,第二個參數(shù)是http狀態(tài)碼。
重定向的工作流程是:
1:當服務端向客戶端響應 redirect后,并沒有提供任何view數(shù)據(jù)進行渲染,僅僅是告訴瀏覽器響應為 redirect,以
及重定向的目標地址
2:瀏覽器收到服務端 redirect 過來的響應,會再次發(fā)起一個 http 請求
3:由于是瀏覽器再次發(fā)起了一個新的 http 請求,所以瀏覽器地址欄中的 url 會發(fā)生變化
4:瀏覽中最終得到的頁面是最后這個 重定向的url 請求后的頁面
5:所以redirect(“/register”,302) 相當于你在瀏覽器中手動輸入 localhost/register文章來源:http://www.zghlxwxcb.cn/news/detail-500665.html
2渲染
渲染就是控制期把一些數(shù)據(jù)傳遞給視圖,然后視圖用這些輸出組織成html界面。所以不會再給瀏覽器發(fā)請求,是服
務器自己的行為,所以瀏覽器的地址欄不會改變,但是顯示的頁面可能會發(fā)生變化。用的函數(shù)是: this.TplName =
“l(fā)ogin.html”文章來源地址http://www.zghlxwxcb.cn/news/detail-500665.html
2 高級查詢
1 獲取全部數(shù)據(jù)
o := orm.NewOrm()
qs := o.QueryTable("article")
var articles []models.Article
_, err := qs.All(&articles)
if err != nil {
c.Data["errmsg"] = "查詢數(shù)據(jù)錯誤"
c.TplName = "add.html"
}
c.Data["articles"] = articles
2 分頁數(shù)據(jù)獲取
//展示文章列表頁
func(this*ArticleController)ShowArticleList(){
//獲取數(shù)據(jù)
//高級查詢
//指定表
o := orm.NewOrm()
qs := o.QueryTable("Article")//queryseter
var articles []models.Article
//查詢總記錄數(shù)
count,_ := qs.Count()
//獲取總頁數(shù)
pageSize := 2
pageCount := math.Ceil(float64(count) / float64(pageSize))
//獲取頁碼
pageIndex,err:= this.GetInt("pageIndex")
if err != nil{
pageIndex = 1
}
//獲取數(shù)據(jù)
//作用就是獲取數(shù)據(jù)庫部分數(shù)據(jù),第一個參數(shù),獲取幾條,第二個參數(shù),從那條數(shù)據(jù)開始獲取,返回值還是querySeter
//起始位置計算
start := (pageIndex - 1)*pageSize
qs.Limit(pageSize,start).All(&articles)
//傳遞數(shù)據(jù)
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數(shù)據(jù)庫】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!