Beego框架快速入门

1.框架了解

  • go语言的web框架:beego,gin,echo等等,那为什么我们选择beego呢?
  • 第一,beego是中国人开发的,开发文档比较详细,beego官网网址: https://beego.me/ 。
  • 第二,现在公司里面用beego的也比较多,比如今日头条,百度云盘,腾讯,阿里等。

2.环境搭建

  • 这里默认大家已经搭建好了go语言的开发环境。
  • 需要安装Beego源码和Bee开发工具:
    • go get -u -v github.com/astaxie/beego
    • go get -u -v github.com/beego/bee
  • Bee开发工具带有很多Bee命令。比如bee new 创建项目, bee run 运行项目等。用bee运行项目,项目自带热更新
  • 安装完之后,bee可执行文件默认存放在KaTeX parse error: Expected 'EOF', got '\bin' at position 7: GOPATH\̲b̲i̲n̲ ̲里面,所以需要把GOPATH\bin 添加到您的环境变量中
  • 安装好之后,运行bee new preojectName 来创建一个项目,注意:通过bee创建的项目代码都是在$GOPATH/src 目录下面的
  • 生成的项目目录结构如下:
quickstart
│
│  main.go                    ##项目的入口文件
│
├─conf                        ##放的是项目有关的配置文件
│      app.conf
│
├─controllers                 ##存放主要的业务代码
│      default.go
│
├─models                      ##存放的是数据库有关内容
├─routers                     ##存放路由文件,路由作用是根据不同的请求指定不同的控制器
│      router.go
│
├─static                      ##存放静态资源,包括图片,html页面,css样式,js文件等
│  ├─css
│  ├─img
│  └─js
│          reload.min.js
│
├─tests                       ##测试文件
│      default_test.go
│
└─views                       ##存放视图有关内容index.tpl
  • 进入项目目录 执行bee run 命令,在浏览器输入网址:http://127.0.0.1:8080

3.快速体验

  • 修改controllers\default.go下的:c.TplName = “index.tpl” 为 c.TplName = “test.html”
  • 在views下新建一个test.html
  • c.Data[“Email”] = "astaxie@gmail.com" 是给视图传递数据,在视图界面里面需要用{{ }} 加上. 才能获取到
  • c.TplName = “index.tpl” 的作用是指定视图。默认指定的界面是tpl结尾,但是打开这个文件分析,发现还是一个html界面。
<html>
<body><center><h1>Hello World</h1><h1>{{.Website}}</h1><h1>{{.Email}}</h1></center>
</body>
</html>
  • 从项目的入口main.go开始
  • 找到router.go文件的Init函数
  • 找到路由指定的控制器文件default.go的Get方法
  • 然后找到指定视图的语法,整个项目就串起来啦。
  • 现在访问:http://127.0.0.1:8080,在浏览器看见的就是自定义的test.html

4.Post请求

  • 修改我们刚才创建的新的视图,为了能够发送post请求,我们在视图中添加一个能发送post请求的控件form
<form method="post" action="/index"><input type="submit">
</form>
  • 在routers\router.go中加入一行:

    • beego.Router("/index", &controllers.IndexController{})
  • 在controllers\default.go 加入以下代码:
type IndexController struct {beego.Controller
}func (c *IndexController) Post() {c.Data["test"] = "区块链"c.TplName = "test.html"
}
  • 在test.html中设置一个能接收后台传递过来的数据的标签:<h1>{{.test}}</h1>
  • 现在访问:http://127.0.0.1:8080,在浏览器就可以看见后台渲染页面的数据"区块链"
  • 默认get请求访问Get()方法,post请求访问Post()方法。

5.路由设置

  • 一般在开发过程中,我们基本不使用beego提供的默认请求访问方法,都是自定义相应的方法。
  • 自定义请求方法需要用到Router的第三个参数。这个参数是用来给不同的请求指定不同的方法。具体有如下几种情况。
    • 一个请求访问一个方法(也是最常用的),请求和方法之间用 : 隔开,不同的请求用 ; 隔开:
    • beego.Router("/simple",&SimpleController{},“get:GetFunc;post:PostFunc”)
    • 可以多个请求,访问一个方法 ,请求之间用, 隔开,请求与方法之间用: 隔开:
    • beego.Router("/api",&RestController{},“get,post:ApiFunc”)
    • 所有的请求访问同一个方法,用* 号代表所有的请求,和方法之间用: 隔开:
    • beego.Router("/api/list",&RestController{},"*:ListFood")
    • 如果同时存在 * 和对应的 HTTP请求,那么优先执行 HTTP请求所对应的方法,例如同时注册了如下所示的路由:
    • beego.Router("/simple",&SimpleController{},"*:AllFunc;post:PostFunc")
    • 那么当遇到Post请求的时候,执行PostFunc而不是AllFunc。
  • 如果用了自定义方法之后,默认请求方法Get、Post将不能访问。
5.1正则路由
  • 为了用户更方便的设置路由,还支持正则路由:
  • beego.Router("/api/?:id", &controllers.RController{})
    • 获取/api/*请求的所有值,赋值给id。在Controller里面可以获取:id := c.GetString(":id")
  • beego.Router("/api/:id([0-9]+)", &controllers.RController{})
    • 匹配 /api/123 :id=123
  • beego.Router("/user/:username([\w]+)", &controllers.RController{})
    • 配 /user/astaxie :username=astaxie
  • beego.Router("/download/.", &controllers.RController{})
    • 匹配 /download/file/api.xml :path=file/api :ext=xml
  • beego.Router("/download/ceshi/*", &controllers.RController{})
    • 匹配 /download/ceshi/file/api.json :splat=file/api.json

6.ORM框架

  • Beego中内嵌了ORM框架,用来操作数据库。在 models下新建一个go文件 model.go:
package modelsimport "github.com/astaxie/beego/orm"//User这个对象映射到数据库就是一个表
//如果user表不存在,在bee run启动的时候就会自动创建表
//ORM默认会以变量名为Id,类型为int的字段当主键,主键是自增的
type User struct {Id     intName   stringPasswd string
}func init() {//1.连接数据库,第一个参数为数据库别名,也可以理解为数据库的key值,项目中必须有且只能有一个别名为default 的连接orm.RegisterDataBase("default", "mysql", "root:root@tcp(180.76.248.109:3306)/golang?charset=utf8")//2.注册表,如果有多个表,可以用 , 隔开,多new几个对象orm.RegisterModel(new(User))//3.生成表//3.1 数据库别名//3.2 是否强制更新,一般我们写的都是false,如果写true的话,每次项目编译一次数据库就会被清空一次//3.3 创建表过程是否可见orm.RunSyncdb("default", false, true)
}
  • 因为这里我们把ORM初始化的代码放到了 models包的init()函数里面,所以如果我们想让他执行的话就需要在 main.go里面加入这么一句代码:
package mainimport (_ "beegodemo/routers"       ##在项目启动之前,会先执行这两个package下面的init()函数_ "beegodemo/models"        ##这行代码就是新加的"github.com/astaxie/beego"
)func main() {beego.Run()
}
  • 新增一个请求路由:
  • beego.Router("/mysql", &controllers.MysqlController{},“get:GetFunc;post:PostFunc”)
  • 然后在 controllers 下新增一个go文件 MysqlController.go:
package controllersimport ("github.com/astaxie/beego""database/sql"_ "github.com/go-sql-driver/mysql""fmt""github.com/astaxie/beego/orm""beegodemo/models"
)//继承Controller
type MysqlController struct {beego.Controller
}//get请求,测试操作数据库
func (c *MysqlController) GetFunc() {db, _ := sql.Open("mysql", "root:root@(180.76.248.109:3306)/golang")defer db.Close()err := db.Ping()if err != nil {fmt.Println("数据库连接失败:", err)c.Ctx.WriteString("数据库连接失败")}var id, name stringrows := db.QueryRow("select * from stu where id=?", 2)rows.Scan(&id, &name)c.Data["id"] = idc.Data["name"] = namec.TplName = "index.html"
}//post请求
func (c *MysqlController) PostFunc() {o := orm.NewOrm() //先获取一个ORM对象//插入var user models.User //定义一个要插入数据库的结构体对象//这里不用给Id赋值,因为Id是自增的user.Name = "事后诸葛亮"user.Passwd = "1q2w3e"id, err := o.Insert(&user)if err != nil {beego.Error("插入失败:", err)}beego.Info("插入数据成功,ID为:", id)//删除var u models.Useru.Id = 1 //删除的对象主键必须有值,如果主键没值,就查询一下。count, err := o.Delete(&u)if err != nil {beego.Info("删除失败", err)}beego.Info("删除了", count, "行记录,ID为:", u.Id)//查询user.Id = int(id)err = o.Read(&user)if err != nil {beego.Error("查询失败0", err)}beego.Info("查询数据:", user)//修改user.Id = int(id)user.Name = "张胜鸿"count, err = o.Update(&user)if err != nil {beego.Error("更新失败", err)}beego.Info("修改了", count, "行记录,ID为:", user.Id)c.Data["id"] = user.Idc.Data["name"] = user.Namec.TplName = "index.html"
}
  • 在 views\index.html加入代码:
  • 最后,在浏览器中输入:http://127.0.0.1/mysql 测试orm
<form method="post" action="/mysql"><input type="submit">
</form>

十九、Beego框架快速入门相关推荐

  1. Go语言Web框架:Beego框架快速入门

    文章目录 Beego框架快速入门 1.beego框架了解 2.MVC架构 3.环境搭建 4.beego的项目结构分析 5.Beego快速体验 6.Beego运行流程分析 7.Post案例实现 7.1前 ...

  2. 视频教程-Spring框架快速入门到精通-Java

    Spring框架快速入门到精通 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥18.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 ...

  3. Quartz 框架快速入门(二)

    尽可能的用声明式处理软件配置,其次才考虑编程式的方式.在上一篇<Quartz 框架快速入门(一)>中,如果我们要在 Job 启动之后改变它的执行时间和频度,必须去修改源代码重新编译.这种方 ...

  4. Quartz 框架快速入门(四)

    Spring的scheduling.quartz包中对Quartz框架进行了封装,使得开发时不用写任何QuartSpring的代码就可以实现定时任务.Spring通过JobDetailBean,Met ...

  5. Quartz 框架快速入门(三)

    在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Schedul ...

  6. 【完结】给新手的12大深度学习开源框架快速入门项目

    文/编辑 | 言有三 这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpen ...

  7. java day53【 Mybatis框架概述 、 Mybatis 框架快速入门、自定义 Mybatis 框架 】

    第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种 定义认为,框架是可被应用开发者定 ...

  8. 微信小程序wepy框架快速入门

    微信小程序wepy框架快速入门 微信小程序简介 微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一 ...

  9. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

最新文章

  1. 面试被问烂的 Spring IOC(求求你别再问了)
  2. Vim - 编辑多个文件
  3. php 自动创建文件,php:自动创建多级文件夹
  4. Activiti邮件任务
  5. struts2的DevMode(开发模式)模式
  6. 目标检测(Object Detection)资料汇总
  7. Linux学习之系统编程篇:条件变量(pthread_cond_init / wait / signal / broadcast / destroy)
  8. android textView设置粗体
  9. TCP 之 RST 原因分析
  10. ISAKMP:(1006):deleting node 1202729771 error TRUE reason Delete Larval
  11. maven创建Java 和 Web Project, 并导入Eclipse
  12. python作品_专业解读 | 制作游戏、开发APP、 爬虫采集数据等背后,Python全栈专业背后还有更大的世界...
  13. 专访ThoughtWorks王磊:从单块架构到微服务架构
  14. matlab课堂笔记,厦门大学matlab第四次课程笔记 PTB的简单讲解
  15. ios查看帧率的软件_iOS显示FPS值的工具FHHFPSIndicator
  16. React 移动端`1px`像素边框
  17. 理解SVM的三重境界
  18. 免费高清图片网站(国外)
  19. [Windows]卸载Office 2016密钥
  20. 悉尼mit it硕士选课 INFO5990

热门文章

  1. c语言 讲小写字母转换成大写
  2. Logstash:在实施之前测试 Logstash 管道/过滤器
  3. 用Android-X86和VMware打造高性能Android开发环境
  4. oracle sequence job
  5. windows包管理工具chocolatey安装
  6. Sedona NetFusion SDN软件升级指出更多网络分析和报告功能
  7. Windows 系统如何在 C++ 项目中使用第三方库
  8. javascript单引号_避免JavaScript单文化
  9. CAN总线开发一本全(4) - FlexCAN的驱动程序
  10. python excel 复制行_如何使用Python将一行Excel工作表复制到另一个工作表