01: 安装/升级
框架安装
前提需要安装
bee
工具
bee工具安装方法:
go get github.com/beego/bee
创建web项目:
bee new my_project
创建api项目:
bee api my_project
启动项目
bee run
打包项目
用来发布时打包应用 会把项目打包成 zip 压缩包,解压就可以部署
bee pack
02: MVC快速入门
01: 路由
路由配置文件在项目目录下的routes目录下
基础例子
beego.Router("/home", &controllers.HomeController{})
基本GET路由
beego.Get("/",func(ctx *context.Context){
ctx.Output.Body([]byte("hello world"))
})
基本POST路由
beego.Post("/user",func(ctx *context.Context){
ctx.Output.Body([]byte("bob"))
})
路由默认访问的控制器方法
请求类型 | 方法 |
---|---|
GET | Get |
POST | Post |
PUT | Put |
DELETE | Delete |
PATCH | Patch |
OPTIONS | Options |
路由参数
下面例子中使用以:开头的为路由参数
beego.Router("/:id", &controllers.ArticleController{})
beego.Router("/:id/:name", &controllers.UserController{})
可忽略参数
beego.Router("/?:id", &controllers.ArticleController{})
限制参数类型
beego.Router("/:id([0-9]+)", &controllers.ArticleController{})
自定义操作方法
beego.Router("/", &controllers.ArticleController{},"get:Index;post:Save")
beego.Router("/:id", &controllers.ArticleController{},"delete:Delete,put:Update")
beego.Router("/:id/edit", &controllers.ArticleController{},"get:Edit")
上面生成的路由为:
请求方式 | 路由地址 | 说明 |
---|---|---|
GET | http://127.0.0.1:8000/ | 获取文章列表 |
POST | http://127.0.0.1:8000/ | 创建文章 |
GET | http://127.0.0.1:8000/10000/edit | 获取要编辑的文章 |
PUT | http://127.0.0.1:8000/1000 | 更新文章 |
DELETE | http://127.0.0.1:8000/1000 | 删除文章 |
02: 控制器
控制器定义
只需要匿名组合 beego.Controller
type HomeController struct {
beego.Controller
}
控制器方法
func (c *HomeController) Home() {
}
请求参数获取
获取全部类型的参数
不管是get还是post或者其他类型的都可以获取到
- 请求地址: POST
http://127.0.0.1:8080/?id=1
var id := c.GetString("id")
- 请求地址: GET
http://127.0.0.1:8080/?id=1&id=2&id=3
获取数组参数
var ids := c.GetStrings("id")
获取路由变量值
该方法只能获取到路由地址中定义的变量所对应的值
var id = c.Ctx.Input.Param(":id")
参数自动解析到struct
结构体的
tag
为:form:"xxx"
- 定义结构体:
type Login struct {
Account string `form:"account"`
Password string `form:"password"`
}
- 控制器方法
func (c *HomeController) Save() {
login := Login{}
if err := c.ParseForm(&login); err != nil {
panic("解析失败")
}
fmt.Println(login)
}
数据绑定
从请求中直接数据bind到指定的对象
var id int
_ = c.Ctx.Input.Bind(&id, "id")
fmt.Println(id)
请求类型检测
支持很多类型 下面列举几个常用的
调用方法 | 说明 |
---|---|
c.Ctx.Input.IsAjax() |
是否为Ajax请求 |
c.Ctx.Input.IsPost() |
是否为post请求 |
c.Ctx.Input.IsGet() |
是否为Get请求 |
c.Ctx.Input.IsWebsocket() |
是否为websocket请求 |
- 请求类型检测都是基于
input.Is(method)
函数封装的 - 所以完全可以使用
c.Ctx.Input.Is()
去实现 效果和效率基本都一致
url构建
其实就一个 UrlFor
UrlFor("HomeController.Index")
模板渲染
c.TplName = "index.html"
如果不设置该参数,那么默认会去到模板目录的 Controller/<方法名>.tpl 查找,例如下面的的方法会去 homecontroller/home.tpl (文件、文件夹必须小写)
func (c *HomeController) Home() {
// 没有设置TplName
}
不使用模板
有些场景下我们不需要使用模板 有两个方式关闭
方法1
c.EnableRender = false
方法2:
全局的关闭在配置文件里面增加autorender = false
返回json数据
第一种:
var data = make(map[string]string)
data["username"] = "lee"
c.Data["json"] = data
c.ServeJSON()
第二种:
使用结构体
- 定义结构体
type User struct {
Id int `json:"id"`
Username string `json:"username"`
}
var data = User{Id: 1000, Username: "lee"}
c.Data["json"] = data
c.ServeJSON()
03: 模型
模型代码在models目录下
本次使用的数据库为mysql数据库
安装orm
- 安装命令:
go get github.com/astaxie/beego/orm
基本使用
在models目录下创建models.go文件 键入以下代码:
package models
import (
"fmt"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func init() {
_ = orm.RegisterDriver("mysql", orm.DRMySQL)
var err = orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1)/blog")
if err != nil {
fmt.Println("数据库连接失败", err)
return
}
}
之后再main.go中写入:
import _ "demo/article_demo/myproject/models"
数据库的设置
设置 driverName 对应的数据库类型
参数1 : driverName
参数2 : 数据库类型
mysql sqlite3 postgres 这三种是默认已经注册过 所以可以无需设置
orm.RegisterDriver("mymysql", orm.DRMySQL)
数据库注册
必须注册一个别名为
default
的数据库作为默认使用
var err = orm.RegisterDataBase(aliasName, driverName, dataSource,params)
参数:
参数名 | 说明 | 可否为空 |
---|---|---|
aliasName | 数据库的别名,用来在ORM中切换数据库使用 | 否 |
driverName | driverName | 否 |
dataSource | 对应的链接字符串 | 否 |
params | 如果传递1个 第一个是设置最大空闲连接,如果传递两个,第二个是设置最大数据库连接 | 是 |
网友评论