beego架构
积木式集合
cache 缓存模块
config 配置模块
context 上下文模块
logs 日志模块
orm 和数据库操作相关模块
session 会话
httplib 网络相关模块
beego执行逻辑
页面(V) — 控制© — 数据库(M)
beego项目结构
|_____config
| |---app.config
|_____controllers(C)
| |---admin
| |---default.go
|_____main.go
|_____modles(M)
| |---modles.go
|_____static
| |---css
| |---ico
| |---img
| |---js
|_____views(V)
| |---admin
| |---index.tpl
config 配置文件
controllers 控制ceng
main.go 主入口
modles 和数据库相关
statics 静态文件(html, css, js)
views 页面展示
快速开发
1.环境安装
2.安装bee工具
bee命令
new 基于web开发
api 基于手机接口开发
run 运行
new命令
.
├── conf
│ └── app.conf
├── controllers
│ └── default.go
├── main.go
├── models
├── routers
│ └── router.go
├── static
│ ├── css
│ ├── img
│ └── js
│ └── reload.min.js
├── tests
│ └── default_test.go
└── views
└── index.tpl
api命令
.
├── conf
│ └── app.conf
├── controllers
│ ├── object.go
│ └── user.go
├── main.go
├── models
│ ├── object.go
│ └── user.go
├── routers
│ └── router.go
└── tests
└── default_test.go
run命令
bee run (在项目根目录去执行)
http://172.0.0.1:8080/
配置文件
1.系统配置
appname = myweb
httpport = 8080
runmode = dev prod test
2.应用配置
配置数据库
动态配置:
runmode
[dev]
httpport = 8080
[test]
httpport = 8081
[prod]
httpport = 8082
路径操作
1.固定路由
beego.Router("/", &controllers.MainController{})
beego.Router("/admin", &controllers.UserController{})
beego.Router("/admin/index", &controllers.ArticleController{})
beego.Router("/admin/addpkg", &controllers.AddController{})
2.基础路由
基本Get路由
beego.Get("/",func(ctx *context.Context){
ctx.Output.Body([]byte ("hello world"))
})
基本Post路由
beego.Post("/",func(ctx *context.Context){
ctx.Output.Body([]byte ("hello world"))
})
3.自定义方法及RESTful规则
beego.Router("/", &IndexController{}, "*:Index")
*post get put delete
127.0.0.1:8080/ (post get put delete)
func init() {
beego.Router("/", &controllers.MainController{}, "post:Get")
}
操作
1.控制器两个方法
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "myindex.tpl"
}
func (c *MainController) Test() {
c.Ctx.WriteString("this is method post!")
}
2.路由配置
func init() {
beego.Router("/", &controllers.MainController{}, "post:Get", "post:Test")
}
3.curl测试
curl -d 'id=1' '127.0.0.1:8080'
案例
1.写控制器
package controllers
import (
"github.com/astaxie/beego"
)
type TestController struct {
beego.Controller
}
func (c *TestController) Get() {
c.Ctx.WriteString("beego controller")
}
写路由
func init() {
beego.Router("/", &controllers.MainController{}, "post:Get", "post:Test")
beego.Router("/test", &controllers.MainController{}, "post:Get", "post:Test")
}
3.开启
bee run
4.测试
curl去请求
post:
curl -d 'id=1' '127.0.0.1:8080/test'
get:
curl 127.0.0.1:8080/test'
请求参数
http://192.168.0.12/?id=xxx&name=xxxx
GetString(key string) string
GetStrings(key string) []string
GetInt(key string) (int64, error)
GetBool(key string) (bool, error)
GetFloat(key string) (float64, error)
this.Input().Get("id")
案例
1.控制器获取参数
package controllers
import (
"github.com/astaxie/beego"
)
type TestArgController struct {
beego.Controller
}
func (c *TestArgController) Get() {
id := c.GetString("id")
c.Ctx.WriteString(id)
name := c.Input().Get("name")
c.Ctx.WriteString(name)
}
2.写路由
beego.Router("/test/arg", &controllers.TestArgController{}, "get:Get;post:Post")
3.访问
http://localhost:8080//test/arg?id=10&name=xiang
获取结构体
<form id="user" action="http://127.0.0.1:8080/test/arg" method="post">
名字: <input name="username" type="text" />
年龄: <input name="age" type="text" />
邮箱: <input name="email" type="text" />
<input type="submit" value="提交" />
package controllers
import (
"github.com/astaxie/beego"
)
type User struct {
Uid int `form:"-"`
Username string `form:"username"`
Age string `form:"age"`
Email string `form:"email"`
}
type TestArgController struct {
beego.Controller
}
func (c *TestArgController) Get() {
c.TplName = "myindex.tpl"
}
func (c *TestArgController) Post() {
u := User{}
if err := c.ParseForm(&u); err != nil {
}
c.Ctx.WriteString("Username:" + u.Username + "Age:" + u.Age + "Email:" + u.Email)
}
model层
beego ORM是一个强大的go语言ORM框架
1.ORM特性
支持go所有类型存储
简单易上手
自动Join关联表
跨数据库兼容
允许直接使用SQL查询/映射
2.代码实战
1.控制器
xxxController
TestMode.go
func init() {
err := orm.RegisterDataBase("default", "mysql", "root:li000000@tcp(127.0.0.1:3306)/WebTest?charset=utf8", 30)
if err != nil {
panic(err)
}
orm.RegisterModel(new(UserInfo)) //创建一个user_info表 UserInfo
}
func (c *TestModelController) Get() {
o := orm.NewOrm()
user := UserInfo{Username: "xiang", Password: "123456"}
id, err := o.Insert(&user)
c.Ctx.WriteString(fmt.Sprintf("操作数据库id=%d err:%v", id, err))
}
router.go
package routers
import (
"github.com/astaxie/beego"
"github.com/beego/bee/myweb/controllers"
)
func init() {
beego.Router("/", &controllers.MainController{}, "get:Get;post:Test")
beego.Router("/test", &controllers.TestController{}, "get:Get;post:Post")
beego.Router("/test/arg", &controllers.TestArgController{}, "get:Get;post:Post")
//测试ORM
beego.Router("/test/orm", &controllers.TestModelController{}, "get:Get;post:Post")
}