02 . Beego框架結構組織,路由及項目初始化
Beego項目組織結構
conf
conf:項目配置文件所在的目錄,項目中有一些全局的配置都可以放在此目錄下。默認的app.conf文件中默認指定了三個配置:
// 1)appname = BeegoDemo2: 指定項目名稱。
// 2)httpport = 8080: 指定項目服務監聽端口。
// 3)runmode = dev: 指定執行模式。
Controllers
該目錄是存放控制器文件的目錄,所謂控制器就是控制應用調用哪些業務邏輯,由controllers處理完http請求以後,並負責返回給前端調用者。
models
models層可以解釋為實體層或者數據層,在models層中實現和用戶和業務數據的處理,主要和數據庫表相關的一些操作會在這一目錄中實現,然後將執行後的結果數據返回給controller層。比如向數據庫中插入新數據,刪除數據庫表數據,修改某一條數據,從數據庫中查詢業務數據等都是在models層實現。
routers
該層是路由層。所謂路由就是分發的意思,當前端瀏覽器進行一個http請求達到後台web項目時,必須要讓程序能夠根據瀏覽器的請求url進行不同的業務處理,從接收到前端請求到判斷執行具體的業務邏輯的過程的工作,就由routers來實現。
static
在static目錄下,存放的是web項目的靜態資源文件,主要有:css文件,img,js,html這幾類文件。html中會存放應用的靜態頁面文件。
views
views中存放的就是應用中存放html模版頁面的目錄。所謂模版,就是頁面框架和布局是已經使用html寫好了的,只需要在進行訪問和展示時,將獲取到的數據動態填充到頁面中,能夠提高渲染效率。因此,模版文件是非常常見的一種方式。
綜上,這個整個的項目架構就是MVC的運行模式。常見的架構模式大家應該熟悉比如:MVC,MVP,MVVM等架構。這裡我們採用MVC
路由設置
基礎路由
Get請求就會對應到Get方法,Post就會對應到Post方法,Delete就會對應到Delete方法,Header方法就會對應Header方法。
package routers
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/context"
)
/**
* 基礎路由
* beego框架提供了常見的http的請求類型方法的路由方案,比如: get,post,head,options,delete等方法
*/
func init() {
beego.Get("/get", func(context *context.Context) {
beego.Info("基礎路由中的get請求")
context.Output.Body([]byte("基礎路由中的get請求"))
})
beego.Get("/getUserInfo", func(context *context.Context) {
beego.Info("獲取用戶信息")
context.Output.Body([]byte("獲取用戶信息"))
})
beego.Post("/post", func(this *context.Context) {
beego.Info("基礎路由中的post請求")
this.Output.Body([]byte("基礎路由的post請求"))
})
}
固定路由
諸如以下此種代碼形式:
// beego.Router("/",controller);
// Get請求就會對應到Get方法,Post就會對應到Post方法,Delete就會對應到Delete方法,Header方法就會對應Header方法。
正則路由
正則路由是指可以在進行固定路由的基礎上,支持匹配一定格式的正則表達式。比如:id,:username,自定義正則,file的路徑和後綴切換以及全匹配等操作。
自定義路由
上面兩種路由都是默認的根據請求的類型,Get就執行Get方法,Post執行Post方法,比較局限。因為在開發的時候大部分都是使用固定匹配想要直接執行對應的邏輯控制方法,因此beego提供給我們了可以自定義的自定義路由配置。方式如下:
// beego.Router("/",&IndexController{},"")
Model層
在Web開發過程中,開發者操作數據,存儲數據最常用的就是數據庫操作,數據庫操作是獨立的一個模塊,這個在後面具體的項目中實現。
View編寫
在實際的開發過程中,要求大家需要掌握html,js語法以及簡單的css語法要能看懂,能夠時間簡單的使用。更加複雜的前端頁面或者靜態頁面,需要和前端開發人員進行對接。開發重心是在後台服務端,因此,只需要學會使用和調用調試即可。
靜態文件的設置
在goweb項目中,上面說過是有一些靜態資源文件的,如果用戶要訪問靜態資源文件,我們應該也是能夠訪問的,這需要在我們的項目中進行靜態資源設置。
設置方式為:
// beego.SetStaticPath("/down1","download1")
// 這裡的download目錄是指的非goweb項目的static目錄下目錄,而是開發者重新新建的另外的目錄。
配置數據庫
mysql數據庫安裝
請看我寫的專門部署mysql博客
//www.cnblogs.com/you-men/p/12838133.html
配置數據庫驅動
數據庫編程屬於beego中的Models層,也稱為ORM模塊
在beego中,目前支持三種數據庫驅動,分別是:
// MySQL: github.com/go-sql-driver/mysql
// PostgreSQL:github.com/lib/pq
// Sqlite3:github.com/mattn/go-sqlite3
go get github.com/go-sql-driver/mysql
beego中的ORM所具備的幾個特性
// 1. 支持G語言的所有類型存儲
// 2. CRUD操作簡單
// 3. 自動Join關聯表
// 4. 允許直接使用SQL查詢
beego項目中使用mysql
導入對應的數據庫驅動
import _ "github.com/go-sql-driver/mysql"
註冊驅動,連接數據庫
orm.RegisterDriver("mysql",orm.DRMySQL)
orm.RegisterDataBase(aliasName,driverName,dbConn)
連接數據庫代碼
package models
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"BlogProject/MysqlDemo/util"
//切記:導入驅動包
_ "github.com/go-sql-driver/mysql"
)
func init() {
driverName := beego.AppConfig.String("driverName")
//註冊數據庫驅動
orm.RegisterDriver(driverName, orm.DRMySQL)
//數據庫連接
user := beego.AppConfig.String("mysqluser")
pwd := beego.AppConfig.String("mysqlpwd")
host := beego.AppConfig.String("host")
port := beego.AppConfig.String("port")
dbname := beego.AppConfig.String("dbname")
//dbConn := "root:yu271400@tcp(127.0.0.1:3306)/cmsproject?charset=utf8"
dbConn := user + ":" + pwd + "@tcp(" + host + ":" + port + ")/" + dbname + "?charset=utf8"
err := orm.RegisterDataBase("default", driverName, dbConn)
if err != nil {
util.LogError("連接數據庫出錯")
return
}
util.LogInfo("連接數據庫成功")
}