Beego框架学习--(核心:数据交互)
Beego框架学习记录
1、beego简介
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。
参考文档:开发文档
1.1、beego整体架构
beego 是基于八大独立的模块构建的,是一个高度解耦的框架。当初设计 beego 的时候就是考虑功能模块化,用户即使不使用 beego 的 HTTP 逻辑,也依旧可以使用这些独立模块,例如:你可以使用 cache 模块来做你的缓存逻辑;使用日志模块来记录你的操作信息;使用 config 模块来解析你各种格式的文件。所以 beego 不仅可以用于 HTTP 类的应用开发,在你的 socket 游戏开发中也是很有用的模块,这也是 beego 为什么受欢迎的一个原因。大家如果玩过乐高的话,应该知道很多高级的东西都是一块一块的积木搭建出来的,而设计 beego 的时候,这些模块就是积木,高级机器人就是 beego。
1.2、beego执行逻辑
1、beego框架安装
前置条件:已安装go
安装beego和bee
$ export GO111MODULE=on
$ export GOPROXY=https://goproxy.io
$ go get github.com/beego/bee
$ go get github.com/astaxie/beego
安装完之后,
bee
可执行文件默认存放在$GOPATH/bin
里面,所以需要把$GOPATH/bin
添加到环境变量中
2、新建项目
#查看bee相关命令
$ bee
#新建项目 beegojingjinji
$ bee new beegojingjinji
#查看项目结构
$ tree beegojingjinji
beegojingjinji/
├── beegojingjinji
├── conf
│ └── app.conf
├── controllers
│ └── default.go
├── go.mod
├── go.sum
├── main.go
├── models
├── routers
│ └── router.go
├── static
│ ├── css
│ ├── img
│ └── js
│ └── reload.min.js
├── tests
│ └── default_test.go
└── views
└── index.tpl
10 directories, 10 files
#运行项目
$ cd beegojingjinji
$ bee run
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.11.0
2020/10/22 11:00:11 INFO 0001 Using 'beegojingjinji' as 'appname'
2020/10/22 11:00:11 INFO 0002 Initializing watcher...
2020/10/22 11:00:13 SUCCESS 0003 Built Successfully!
2020/10/22 11:00:13 INFO 0004 Restarting 'beegojingjinji'...
2020/10/22 11:00:13 SUCCESS 0005 './beegojingjinji' is running...
2020/10/22 11:00:13.083 [I] [asm_amd64.s:1373] http server Running on http://:8080
采用MVC的架构(model,view,controller),main.go是主入口
文件内容解析:
- conf:存放配置文件,各种配置项,如监听端口,是否开启session,运行模式等
- controllers:控制层,实现业务逻辑
- models:模型层,数据逻辑
- routers:路由,实现路由跳转
- static:存放静态文件
- tests:存放测试文件
- views:视图层,存放前端页面
- go.mod:控制依赖
- main.go:主文件入口
3、启动工作解析
main 函数里面的 beego.Run
, beego.Run
执行之后,看到的效果好像只是监听服务端口这个过程,但是它内部做了很多事情
解析配置文件
beego 会自动解析在 conf 目录下面的配置文件
app.conf
,通过修改配置文件相关的属性,我们可以定义:开启的端口,是否开启 session,应用名称等信息。执行用户的 hookfunc
beego 会执行用户注册的 hookfunc,默认的已经存在了注册 mime,用户可以通过函数
AddAPPStartHook
注册自己的启动函数。是否开启 session
会根据上面配置文件的分析之后判断是否开启 session,如果开启的话就初始化全局的 session。
是否编译模板
beego 会在启动的时候根据配置把 views 目录下的所有模板进行预编译,然后存在 map 里面,这样可以有效的提高模板运行的效率,无需进行多次编译。
是否开启文档功能
根据 EnableDocs 配置判断是否开启内置的文档路由功能
是否启动管理模块
beego 目前做了一个很酷的模块,应用内监控模块,会在 8088 端口做一个内部监听,我们可以通过这个端口查询到 QPS、CPU、内存、GC、goroutine、thread 等统计信息。
监听服务端口
这是最后一步也就是我们看到的访问 8080 看到的网页端口,内部其实调用了
ListenAndServe
,充分利用了 goroutine 的优势
一旦 run 起来之后,我们的服务就监听在两个端口了,一个服务端口 8080 作为对外服务,另一个 8088 端口实行对内监控。
4、路由设置
参照如下链接,解析的十分详细
https://beego.me/docs/mvc/controller/router.md
5、数据交互
5.1、字符串渲染
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "index.tpl"
}
数据默认存储在Data中,只需要在html页面中使用"{{ }}"即可,如{{.Website}}
5.2、重设模板路径
//方法一:
//在beego.run()之前
beego.SetViewsPath("新文件夹名")
//方法二:
//在配置文件中设置
viewspath = 新文件夹名
5.3、前端向后端传递数据
获取用户传递的数据,包括 Get、POST 等方式的请求,beego 里面会自动解析这些数据,可以通过如下方式获取数据
GetString(key string) string
GetStrings(key string) []string
GetInt(key string) (int64, error)
GetBool(key string) (bool, error)
GetFloat(key string) (float64, error)
//对于url中如下形式:local:8080/user?username=aaa
//获取参数username
func (this *MainController) Post() {
//方法一:
username := this.GetString("username")
//方法二:
username := this.Input().Get("username")
}
//对于url中如下形式:local:8080/user/aaaa
//获取参数aaaa
//首先设置路由为:
beego.Router("/user/?:id, &controllers.MainController{})
//获取数据
func (this *MainController) Post() {
//方法一:
id := this.GetString(":id")
//方法二:
username := this.Ctx.Input.Param("username")
}
5.4、接收表单数据
<form action="/addIns" method="post" name="addForm">
<div class="top">
<div class="left">
<p>
<span>机构名称:</span>
<span>
<input type="text" name="name" class="input_text" tabindex="1" onfocus="if(this.placeholder=='机构名称'){this.placeholder='';}this.className ='input_text input_text_focus'" onblur="if(this.value==''){this.placeholder='机构名称';this.className ='input_text'}" accesskey="n" type="text" placeholder="机构名称" size="25" autocomplete="off">
</span>
</p>
</form>
- 读取到字符串
//根据表单中name名,读取对应值
func (this *MainController) Post() {
name := this.GetString("name")
}
- 读取到结构体
type User struct {
name string 'form:"username"' //定义与表单对应的名称
}
func (this *MainController) Post() {
user := User{}
if err := this.ParseForm(&user); err != nil{
return
}
fmt.Println(user.name)
}
5.5、Ajax获取数据
定义前段页面Ajax交互内容
var name = document.getElementById("name").value;
var code = document.getElementById("code").value;
var certNo = document.getElementById("certNo").value;
var address = document.getElementById("address").value;
var legalRepresentative = document.getElementById("legalRepresentative").value;
$.ajax({
url:"/addIns",
type: "post",
data: JSON.stringify({ //前端使用JSON传递数据
"name":name,
"code":code,
"certNo":certNo,
"address":address,
"legalRepresentative":legalRepresentative,
}),
dataType:"JSON", //定义传递格式
success:function (data) {
var code = data["code"]
if (code==400.3){
var inner = document.getElementById("tiptext");
inner.innerHTML = "您已申请机构认证,请勿重复操作!如需更新,请进入更新机构认证页面";
$('#popout').css('display','');
}else if (code==200){
var inner = document.getElementById("tiptext");
inner.innerHTML = "您的认证申请已通过,请稍后查询上链结果!";
$('#popout').css('display','');
}else{
var inner = document.getElementById("tiptext");
inner.innerHTML = "未知错误,请联系工作人员";
$('#popout').css('display','');
}
},
error:function (data){
alert("login failed, unknown failed")
}
})
实现后端Ajax接收数据
func (a *AddInsController) Put() {
ins := models.ChaincodeIns{}
body := a.Ctx.Input.RequestBody //通过内置函数接收Ajax数据
json.Unmarshal(body, &ins) //反序列化解析到结构体中
logs.Informational("Data from addIns html:" + ins.Name + " " + ins.CertNo + " " + ins.Address + " " + ins.LegalRepresentative)
}
Beego框架学习--(核心:数据交互)的更多相关文章
- Beego框架学习---layout的使用
Beego框架学习---layout的使用 在管理系统中,管理菜单的界面是固定的,会变化的只是中间的部分.我就在想,是不是跟angular的"组件模块的router-outlet一样&quo ...
- Beego 框架学习(一)
Beego官网本身已经整理的非常详细了,但是作为一个学习者,我还是决定自己好好整理一下,这样在后面使用的时候自己对每部分才能非常熟悉,及时忘记了,也可以迅速定位自己要用的知识在哪里.当然也是对官网的一 ...
- 在ssm框架中前后台数据交互均使用json格式
前后台数据交互均使用json. 框架ssm(spring+springmvc+mybatis) @RequestBody注解实现接收http请求的json数据,将json数据转换为java对象,注解加 ...
- uLua学习之数据交互(三)
前言 在上节中,大概谈了一下如何在lua脚本中调用unity3d中的方法来创建游戏物体,这只是很小的一个方面,uLua的优势在于对unity3d中C#语言的扩展和定制.那么如何扩展和定制呢?其中的数据 ...
- Beego 框架学习(一)
1.特性 beego是一个http框架 高性能,是目前最快的的go框架 开发快捷,组件多,高度解耦 RESTful方式,可以自定义action 文档完整 智能路由.智能监控 2.安装 go get g ...
- beego框架学习--beego orm映射
什么是ORM 即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作 ...
- beego框架学习(三) -orm的使用
2 3 4 5 6 7 8 9 10 11 目前beego-orm支持的数据有: - MySQL:https://github.com/go-sql-driver/mysql - PostgreSQL ...
- beego框架学习(二) -路由设置
路由设置 什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路由.正则路由.自动路由,接下来详细的讲解如何使用这三种路由. 基础路由 从beego1.2版本 ...
- beego框架返回json数据
一.routers路由 package routers import ( "mybeego/controllers" "github.com/astaxie/beego& ...
随机推荐
- LWJGL3的内存管理,简介及目录
LWJGL3的内存管理,简介及目录 LWJGL3 (Lightweight Java Game Library 3),是一个支持OpenGL,OpenAl,Opengl ES,Vulkan等的Java ...
- [Luogu P3338] [ZJOI2014]力 (数论 FFT 卷积)
题面 传送门: 洛咕 BZOJ Solution 写到脑壳疼,我好菜啊 我们来颓柿子吧 \(F_j=\sum_{i<j}\frac{q_i*q_j}{(i-j)^2}-\sum_{i>j} ...
- Socket创建简单服务器和客户端程序
使用Socket编程创建简单服务器和客户端 要知道的 Socket-AddressFamily, SocketType, ProtocolType https://blog.csdn.net/weix ...
- PASS模型-第一周个人报告
PASS模型-第一周个人报告 博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE2020 作业要求 https://edu.cnblogs.com/campus ...
- Jmeter——ForEach Controller&Loop Controller
今天来分享下Jmeter中的2款循环控制器,ForEach Controller和Loop Controller,在使用上还是有所区别. ForEach Controller ForEach Cont ...
- Java_数组, 懒得整理了 ---------------------> 未完, 待续
待续 public class TestArray { public static void main(String[] args) { String[] s1 = {"双儿", ...
- 腾讯开源 APIJSON 连创五个第一
腾讯第一个码云推荐项目,// 其它最早创建的是 TencentOS-tiny(码云) 2019.8.23 腾讯第一个码云GVP项目,// 其它最早创建的是 TencentOS-tiny(码云) 201 ...
- python爬虫02通过 Fiddler 进行手机抓包
我们要用到一款强大免费的抓包工具 Fiddler你可以到 https://www.telerik.com/download/fiddler去下载 一般情况下 我们通过浏览器来请求服务器的时候 是点对点 ...
- 如约而至,.NET 5.0 正式发布
作者:Richard 翻译:精致码农-王亮 原文:http://dwz.win/WFz 说明:文章太长,后面关于 C# 9 语言新特性及平台新特性的部分没有翻译,这部分基本都是代码示例,请直接阅读原文 ...
- 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(1) - 执行在不同CM内核下
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(1)之执行在不同CM内核下. 文接上篇 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计&g ...