菜是原罪, 基本是copy别人的, 自己抄一遍有个映像.
一. 创建新项目
(1) 创建
bee new tizi365
(2) 项目结构
tizi365
├── conf - 配置文件存放目录
│ └── app.conf - beego应用配置文件,里面包含一些默认的配置包括启动端口、运行模式等等
├── controllers - 控制器目录
│ └── default.go
├── main.go - 入口文件
├── models - model目录,存放我们的业务逻辑和数据库相关的操作
├── routers - 路由配置目录,主要存放我们各个业务模块的路由设置
│ └── router.go
├── static - 静态资源目录,默认静态资源访问url为 "http://域名/static/资源路径"
│ ├── css
│ ├── img
│ └── js
├── tests - 单元测试脚本目录
│ └── default_test.go
└── views - 视图模板目录
└── index.tpl
二. 控制器逻辑
路径: /tizi365/controllers/default.go
package controllers
import (
"github.com/astaxie/beego"
)
// 定义一个控制器结构体
// 我们一般一个模块定义一个控制器
type MainController struct {
// 嵌套beego基础控制器,在go语言中嵌套struct,就类似继承的概念。
// 这里就相当于,继承了beego.Controller的方法和属性。
beego.Controller
}
// 覆盖beego.Controller的Get方法,用于处理RESTful请求中的get请求
// beego.Controller默认支持多种RESTful方法,例如:Post、Put、Delete等等
func (c *MainController) Get() {
// Data是继承过来的属性,是map类型,可以保存任意类型数据,主要用于保存请求响应数据
// 我们可以通过Data将参数,传入视图模板文件。
// 这里设置了两个参数
c.Data["Website"] = "tizi365.com"
c.Data["Email"] = "tizi365@demo.com"
// 设置需要渲染的模板文件,框架会去views目录查找这个模板文件
c.TplName = "index.tpl"
}
三. 设置Url路由
package routers
import (
"tizi356/controllers"
"github.com/astaxie/beego"
)
// go 包初始化函数,go语言中在导入一个包的时候,如果被导入包存在init函数,会执行init函数
// 因此这里可以使用init函数初始化路由设置
func init() {
// 使用beego.Router函数,注册路由规则。
// 第一个参数是url路由,第二个参数是控制器
// 这里的意思就是将访问 / 这个url的请求,交给controllers.MainController控制器处理。
beego.Router("/", &controllers.MainController{})
}
如果我们增加下面路由设置:
beego.Router("tizi365", &controllers.MainController{})
访问:http://localhost:8080/tizi365和http://localhost:8080/得到的结果是一样的, 因为这两个url地址都是由同一个控制器处理.
四. model逻辑
(1) 定义表结构
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`username` varchar(30) NOT NULL COMMENT '账号',
`password` varchar(100) NOT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8
(2) 初始化数据库连接
- 一般初始化数据库连接都是在main.go入口的地方设置一次就行.
- 为了初始化mysql连接,在入口main.go文件,增加init函数初始化数据库设置.
package main
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
//导入mysql驱动,这是必须的
_ "github.com/go-sql-driver/mysql"
_ "tizi356/routers"
)
//初始化应用设置, 我们通过init函数初始化数据库连接,go语言中这个函数会优先执行
func init() {
// 这里注册一个default默认数据库,数据库驱动是mysql.
// 第三个参数是数据库dsn, 配置数据库的账号密码,数据库名等参数
// dsn参数说明:
// username - mysql账号
// password - mysql密码
// db_name - 数据库名
// 127.0.0.1:3306 - 数据库的地址和端口
orm.RegisterDataBase("default", "mysql", "username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8")
}
func main() {
beego.Run()
}
(3) 创建model
创建user model, 路径为:tizi365/modles/user.go
package models
import (
"github.com/astaxie/beego/orm"
)
// 定义User模型,绑定users表结构, 其实就是用来保存sql查询结果。
type User struct {
Id int
Username string
Password string
}
// 定义User 模型绑定那个表?
func (u *User) TableName() string {
// 返回mysql表名
return "users"
}
//初始化函数,可以用来向orm注册model
func init() {
// 向orm注册user模型
orm.RegisterModel(&User{})
}
// 根据id查询用户信息
func GetUserById(id int) *User {
if id == 0 {
return nil
}
// 创建orm对象, 后面都是通过orm对象操作数据库
o := orm.NewOrm()
// 初始化一个User模型对象
user := User{}
// 设置查询参数
user.Id = id
// 调用Read方法,根据user设置的参数,查询一条记录,结果保存到user结构体变量中
// 默认是根据主键进行查询
// 等价sql: SELECT `id`, `username`, `password` FROM `users` WHERE `id` = 1
err := o.Read(&user)
// 检测查询结果,
if err == orm.ErrNoRows {
// 找不到记录
return nil
} else if err == orm.ErrMissPK {
// 找不到住建
return nil
}
return &user
}
(4) 通过控制器调用model
修改控制器代码, tizi365/controllers/default.go.
func (c *MainController) Get() {
c.Data["Website"] = "tizi365.com"
c.Data["Email"] = "tizi365@demo.com"
// 调用model,查询用户id为1 的用户信息
user := models.GetUserById(1)
// 然后将user数据保存到Data中, 将参数传给后面的views视图模板处理
c.Data["user"] = user
// 使用新的视图模板user.tpl
c.TplName = "user.tpl"
}
(5) 编写view视图逻辑
编写一个新的视图模板, 路径: tizi365/views/user.tpl
tpl代码里面有些东西在博客上展现不出来.
代码不放上来了.
beego使用的是go自带的模板引擎,具体的模板语法后面会讲
五. 项目打包
bee工具可以一键将项目需要的相关文件一起打包成一个压缩包,只需要到线上解压即可。
在根目录执行:
bee pack
打包成功后再项目根目录下生成一个tizi365.tar.gz的压缩包,命名格式:${项目名}.tar.gz
我们可以解压缩,看看压缩包包含什么内容:
tizi365.tar.gz
├── conf - 配置文件存放目录,这里包含我们的配置文件
├── static - 静态资源目录,包含我们静态资源文件
├── views - 视图模板目录,包含模板文件
└── tizi365 - 这个就是我们的项目打包后的可执行程序,按我们项目命名