jjnoob

tizi-beego-01-快速入门

2019-07-28
jjnoob

菜是原罪, 基本是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/tizi365http://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) 初始化数据库连接

  1. 一般初始化数据库连接都是在main.go入口的地方设置一次就行.
  2. 为了初始化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         - 这个就是我们的项目打包后的可执行程序,按我们项目命名 

Similar Posts

上一篇 beego-messageboard

Content