beego的快速使用(一)

举报
Nick Qiu 发表于 2021/07/21 21:01:29 2021/07/21
【摘要】 简介beego是一款开源的web框架,笔者以前在做一个页面极少的工具软件时候试水过,本文讲解如何入门使用beego 安装beego安装go语言支持安装/升级beego# 安装GO111MODULE=on go get github.com/astaxie/beegoGO111MODULE=on go get github.com/beego/beeGO111MODULE=off go g...

简介

beego是一款开源的web框架,笔者以前在做一个页面极少的工具软件时候试水过,本文讲解如何入门使用beego

安装beego

  • 安装go语言支持

  • 安装/升级beego

# 安装

GO111MODULE=on go get github.com/astaxie/beego
GO111MODULE=on go get  github.com/beego/bee
GO111MODULE=off go get -u github.com/beego/bee



# 升级
go get -u github.com/astaxie/beego
go get -u github.com/beego/bee


cd $GOPATH/bin/
mkdir -p github.com/astaxie
cd github.com/astaxie
git clone https://github.com/astaxie/beego.git
go get -u github.com/astaxie/beego
go get -u github.com/beego/bee

新建项目

  • 输入如下名创建项目
cd $GOPATH/src

# export GO111MODULE=auto
# 新建项目
bee new quickstart
cd quickstart
go mod init
# 运行项目
bee run 

  • 访问服务器http://localhost:8080/,如果能够正常看到页面则操作成功

  • 项目建立成功后,会有如下目录

./
├── conf           # 配置文件
│   └── app.conf
├── controllers    # 控制类所在目录
│   └── default.go
├── go.mod         # 模块依赖关系管理
├── go.sum         # 
├── hello
├── main.go        # 入口函数
├── models         # 模型函数
├── routers     
│   └── router.go  # 路由控制函数
├── static         # 静态资源
│   ├── css
│   ├── img
│   └── js
│       └── reload.min.js
├── tests           # 测试函数目录
│   └── default_test.go
└── views           # 视图
    └── index.tpl

beego的路由

路由函数

  • routers/router.go路由控制文件,用它来控制路由路径和控制类之间的关系。
package routers

import (
	"hello/controllers"
	"github.com/astaxie/beego"
)

func init() {
	//路由指向 URL : http://localhost:8080/  ,MainController.Get 函数
    beego.Router("/", &controllers.MainController{})
    //路由指向 URL : http://localhost:8080/hi  ,MainController.Hi 函数
    beego.Router("/hi",&controllers.MainController{},"get:Hi")
}

控制类

  • controllers/default.go是默认的控制类文件
package controllers

import (
	"fmt"
	"github.com/astaxie/beego"
)

type MainController struct {
	beego.Controller
}

func (c *MainController) Get() {
	//c.Data赋值的数据到前端视图上可以访问
	c.Data["Website"] = "beego.me"
	c.Data["Email"] = "astaxie@gmail.com"
	//指定对应的前端视图
	c.TplName = "index.tpl"
}


func (c * MainController) Hi(){
	fmt.Print("hi console.")
	//	这里没有指定前端视图,访问的时候会报错
}

视图文件

<!DOCTYPE html>

<html>
<head>
  <title>Beego</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <style type="text/css">
    *,body {
      margin: 0px;
      padding: 0px;
    }

    body {
      margin: 0px;
      font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
      font-size: 14px;
      line-height: 20px;
      background-color: #fff;
    }

    header,
    footer {
      width: 960px;
      margin-left: auto;
      margin-right: auto;
    }

    header {
      padding: 100px 0;
    }

    footer {
      line-height: 1.8;
      text-align: center;
      padding: 50px 0;
      color: #999;
    }

    .description {
      text-align: center;
      font-size: 16px;
    }

    a {
      color: #444;
      text-decoration: none;
    }

    .backdrop {
      position: absolute;
      width: 100%;
      height: 100%;
      box-shadow: inset 0px 0px 100px #ddd;
      z-index: -1;
      top: 0px;
      left: 0px;
    }
  </style>
</head>

<body>
  <header>
    <h1 class="logo">Welcome to Beego</h1>
    <div class="description">
      Beego is a simple & powerful Go web framework which is inspired by tornado and sinatra.
    </div>
  </header>
  <footer>
    <div class="author">
      Official website:
        <!-- {{.Website}}是在控制类传入的变量 -->
      <a href="http://{{.Website}}">{{.Website}}</a> /
      Contact me:
      <a class="email" href="mailto:{{.Email}}">{{.Email}}</a>
    </div>
  </footer>
  <div class="backdrop"></div>

  <script src="/static/js/reload.min.js"></script>
</body>
</html>

使用mysql

前面开始使用beego简单的创建了一个项目,并且实现了一个控制类在像前段传递参数,下面我们介绍如何在beego中使用Mysql,新建一个名字为db1的数据库编码格式使用utf8 ,使用如下脚本初始化mysql数据库

DROP TABLE IF EXISTS `USER`;
CREATE TABLE `USER`(
	ID INT NOT NULL AUTO_INCREMENT COMMENT '主键',
	NAME VARCHAR(45) DEFAULT '' COMMENT '名称',
	SEX TINYINT NOT NULL DEFAULT 0  COMMENT '性别0女,1男',
	PRIMARY KEY (`ID`)
);
INSERT INTO USER  (NAME,SEX)VALUES('邱家洪',1),('nick',1),('elaine',0);
  • 安装依赖包
go get github.com/go-sql-driver/mysql
  • 新建一个模型文件models/testuser.go
package models

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

func PrintUsers() {

	var db, err = sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/db1?charset=utf8")

	//延迟关闭
	defer db.Close()

	if err != nil {
		return
	}

	stmt, err := db.Prepare("select * from user limit 10")
	//延迟关闭
	defer stmt.Close()
	if err != nil {
		return
	}

	rows, err := stmt.Query()
	defer rows.Close()
	if err != nil {
		return
	}

	for rows.Next() {
		var id int
		var name string
		var sex int8
		rows.Scan(&id, &name, &sex)
		fmt.Println(id, name, sex)
	}

}
  • 在控制类内调用该模型controllers/default.go

import (
	"fmt"
	"hello/models"
	"github.com/astaxie/beego"
)

...

func (c * MainController) Hi(){
	fmt.Println("hi console.")

	models.PrintUsers()
	c.TplName = "index.tpl"
} 

  • 验证,重新启动执行该程序,访问页面http://localhost:8080/hi
bee run 

使用orm连接数据库

  • 安装依赖包
go get github.com/astaxie/beego/orm
  • 新建一个模型文件models/testorm.go
package models

import (
	"fmt"

	"github.com/astaxie/beego/orm"
	_"github.com/go-sql-driver/mysql"
)

type User struct {
	Id int
	Name string
	Sex int8
}

func init()  {
	// 注册一个default database,并且设置最大连接数是30
	orm.RegisterDataBase("default","mysql",
		"root:123456@tcp(127.0.0.1:3306)/db1?charset=utf8",30)
	// 注册Model
	orm.RegisterModel(new(User))
	// 自动建表
	orm.RunSyncdb("default",false,true)
}

func PrintUserByORM()  {
	o := orm.NewOrm()
	user := User{Id: 3}
	o.Read(&user)
	fmt.Println(user)
}
  • 在控制类中使用controllers/default.go
package models

import (
	"fmt"

	"github.com/astaxie/beego/orm"
	_"github.com/go-sql-driver/mysql"
)

type User struct {
	Id int
	Name string
	Sex int8
}

func init()  {
	
	orm.RegisterDataBase("default","mysql",
		"root:123456@tcp(127.0.0.1:3306)/db1?charset=utf8",30)
	orm.RegisterModel(new(User))
}

func PrintUserByORM()  {
	o := orm.NewOrm()
	user := User{Id: 3}
	o.Read(&user)
	fmt.Println(user)
}

  • 在控制类中使用controllers/default.go
func (c * MainController) Hi(){
	fmt.Println("hi console.")

	//models.PrintUsers()
	models.PrintUserByORM()
	//指定对应的前端视图
	c.TplName = "index.tpl"
}
  • 验证,重新启动执行该程序,访问页面http://localhost:8080/hi
bee run 
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。