Beego学习-01 基础篇

心已入冬 提交于 2020-02-26 12:26:24

概述

beego是一个快速开发go应用的http框架,他可用来快速开发API、Web以及后端服务等各种应用。

beego的架构

cache 缓存模块
config 配置模块
context 上下文模块
logs 日志模块
orm 和数据库相关的操作
session
httplib 和网络相关的模块

beego执行逻辑

页面(V)----------控制(C)-----------数据库操作(M)

beego项目目录

conf 配置文件
controllers 控制层
main.go 主入口
models 里面放的是和数据库有关的
static 放的是静态文件(html css .js)
views 页面展示
beego的命令
new:基于网站开发(要在gopath环境下)
api:基于手机接口开发
run:运行(项目目录下)
eg.
bee new project-name
bee api api-name
bee run

beego参数配置

系统配置:

appname=project-name

httpport=端口

runmode=dev(开发环境)/prod(正式环境)/test

通过beego.Appname="beepkg"进行修改

应用配置:

mysqluser=" "

mysqlpass=" "

mysqlurl=" "

mysqldb=" "

beego.AppConfig.String(" ")//获取对应的值

beego动态选择:

runmode=dev

【dev】

httpport=8080

【prod】

httpport=8081

【test】

httpport=8082

beego路由操作

固定路由

beego.Router("/", &controllers.MainController{})
基础路由

自定义路由

beego.Router("/", &controllers.MainController{},“get:Get,post:Post”)//get请求调用Get,Post请求调用Post

beego控制器

beego的controller设计

type ***Controller struct{

    beego.Controller

}

在这里插入图片描述
beego处理get方法

GetString(key string)string

GetStrings(key string)[]string

GetInt(key string)(int64,error)

GetBool(key string)(bool,error)

GetFloat(key string)(float64,error)

服务器端概念:

Request: 用户请求的信息,用来解析用户请求,包括get、post、cookie、url等信息。

Response:服务器需要反馈给客户端的信息

Conn:用户的每次请求链接

Handler:处理请求和生成返回信息的处理逻辑

beego处理post请求
c.ParseForm(&u)

注:表单里的名字需要和结构体的名字一样才可以获取到信息

//若名字不一样时通过如下方法进行解析

eg:

type u struct{
Id int `form:"-"`   //"-"不解析
Name string `form:"username"`   //解析username
}

beego ORM数据库
安装:go get github.com/astaxie/beego/orm

//----------------------------------------------链接数据库(func init())----------------------------------------------------------

//注册

orm.RegisterDataBase(“default”,“mysql”,“username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8”)

//创建表

type Task struct{}
orm.RegisterModel(new(Task), new(TaskNumber))
//------------------------------------------------------将数据库信息写入到配置文件(func init())---------------------------------------------------------------

eg.https://www.golangtc.com/t/53006c35320b526197000037

dbHost := beego.AppConfig.String(“DBHost”)
dbPort := beego.AppConfig.String(“DBPort”)
dbUser := beego.AppConfig.String(“DBUser”)
dbPass :=beego.AppConfig.String(“DBPass”)
dbName :=beego.AppConfig.String(“DBName”)

dbDSN:=fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8",dbUser,dbPass,dbHost,dbPort,dbName)

orm.RegisterDriver(“mysql”, orm.DR_MySQL);//可以去掉
orm.RegisterDataBase(“default”,“mysql”,dbDSN)

orm.RegisterModel(new(User))
//------------------------------------------------------------插入数据--------------------------------------------------------------------

//orm对象

o:=orm.NewOrm()

// 默认使用 default,你可以指定为其他数据库
o.Using(“default”)
//数据

user:=User{}

//插入

id,_:=o.Insert(&user)

//--------------------------------------------------------------------更新数据------------------------------------------------------------------------

//orm对象

o:=orm.NewOrm()

//数据

user:=User{Id=" "}

o.Update(&user)

//------------------------------------------------------------------读取--------------------------------------------------------------------------------

//orm对象

o:=orm.NewOrm()

//数据

user:=User{Id=" "}

o.Read(&user)

//-------------------------------------------------------------读取所有-----------------------------------------------------------------------------------------

o := orm.NewOrm()
o.Using(“default”)
var tasks []*models.Task
o.QueryTable(“task”).All(&tasks)
//或者

db:=orm.NewOrm()

var tasks []*models.Task
qb,_:=orm.NewQueryBuilder(“mysql”)

qb.Select("*").From(“task”)

sql:=qb.String()

db.Raw(sql).QueryRows(tasks)

beego获取http返回json

func (this *TaskController) Put() {
//var m map[string]interface{} //声明变量,不分配内存
//m = make(map[string]interface{}) //必可不少,分配内存
//interface转其他类型
form := make(map[string]interface{})
//把 JSON 转换回对象的方法(函数)为 json.Unmarshal()
//****this.Ctx.Input.RequestBody获取http请求内容
if err := json.Unmarshal(this.Ctx.Input.RequestBody, &form); err != nil {
//将类型转换为json
this.Data[“json”] = map[string]interface{}{“err”: “invalid params”}
} else {
task := models.Task{Id: int(form[“Id”].(float64))}
o := orm.NewOrm()
//查询Id的语句,进行更新
if o.Read(&task) == nil {
task.Name = form[“Name”].(string)
task.Min = int(form[“Min”].(float64))
task.Max = int(form[“Max”].(float64))
task.Interval = int(form[“Interval”].(float64))
if _, err := o.Update(&task); err != nil {
this.Data[“json”] = map[string]interface{}{“err”: “update error”}
} else {
this.Data[“json”] = map[string]interface{}{“data”: “update success”}
utils.NotifyChan(&task, 2)
}
} else {
this.Data[“json”] = map[string]interface{}{“err”: “task not exists”}
}
}

this.ServeJSON()
}
返回Json

type User struct {
    Id   int
    Name string
    sex string
}
me := User{Id: 12, Name: "李晓华",sex: "女"}
//json返回
this.Data["json"] = &me
this.ServeJSON()

来源:https://segmentfault.com/q/1010000017220538/a-1020000017225006

实战
//创建Controller

//创建路由

//创建Model

beego 开发文档:https://www.kancloud.cn/hello123/beego/126087

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!