欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Beego学习-01 基础篇

程序员文章站 2022-07-14 20:50:15
...

概述

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学习-01 基础篇
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:aaa@qq.com(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:%aaa@qq.com(%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