0
点赞
收藏
分享

微信扫一扫

Beego基础入门

月白色的大狒 2021-09-27 阅读 46
日记本

环境搭建

 go get -u -v github.com/astaxie/beego  :针对源码
 go get -u -v github.com/beego/bee  :工具集
$ cd ~ 
$ vim .bashrc //在后一行插入 
export PATH="$GOPATH/bin:$PATH" //然后保存退出 
$ source .bashrc

创建项目

运行项目

结构说明

入口文件

package main

import (
    //因为这句话,所以routers目录下的init方法执行,注册了路由
    _ "classone/routers"  //调用后面包里面的init函数(所有文件的)
    "github.com/astaxie/beego"
    _"classone/models"
)

func main() {
    //静态资源和动态路由重合的情况下,静态资源路由优先匹配

    //设置静态资源路径,默认是static,可通过这种方式修改或者增加
    //beego.SetStaticPath()
    beego.Run()
}

路由文件

package routers

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

func init() {
    beego.Router("/", &controllers.MainController{})
    beego.Router("/index", &controllers.IndexController{})
    //高级路由:不使用默认get函数,自定义函数名称,但是必须首字母大写,注意:一旦指定自定义gte请求,不能访问默认的post方法
    beego.Router("/high", &controllers.HighController{},"get:GetFunc")
    //高级路由:两个请求访问一个方法
    //beego.Router("/high", &controllers.HighController{},"get,post:GetFunc")
    //高级路由:两个请求访问两个方法
    //beego.Router("/high", &controllers.HighController{},"get:GetFunc;post:PostFunc")
    //高级路由:所以请求访问一个方法
    //beego.Router("/high", &controllers.HighController{},"*:AllFunc")
    //高级路由:执行post请求优先执行PostFunc,不存在才执行AllFunc;相当于精确原则
    //beego.Router("/high", &controllers.HighController{},"*:AllFunc;post:PostFunc")



    //正则路由(了解即可,需要时候再查询)
    //官方文档:https://beego.me/docs/mvc/controller/router.md


    //mysql控制器
    beego.Router("/mysql", &controllers.MysqlController{})
    //orm控制器
    beego.Router("/orm", &controllers.OrmController{})

    //一般都是还使用OrmController,然后起方法别名这样避免创建多个控制器,即使这些控制器是在一个文件中
    beego.Router("/update", &controllers.OrmUpdateController{})
}

控制器文件

package controllers

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

type MainController struct {
    beego.Controller
}

func (c *MainController) Get() {
    //传递数据,可以在views里面使用
    c.Data["Website"] = "beego.me"
    c.Data["Email"] = "astaxie@gmail.com"
    c.Data["test"] = "区块连"
    c.TplName = "test.html"
}

type IndexController struct {
    beego.Controller
}
type HighController struct {
    beego.Controller
}

func (c *HighController)GetFunc(){
    c.Data["test"]="xixixi"
    c.TplName = "test.html"
}

views文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>hello {{.test}}</h1>
<form method="post" action="/index">
    <input type="submit">
</form>
</body>
</html>

模型文件

package models

import "github.com/astaxie/beego/orm"

type User struct {
    //生成的表结构,首字母会变成小写
    Id int
    Name string
}
/**
此处必须在项目启动时候执行
1. 连接数据库要尽量先的执行
2. 如果写在别的地方,很容易出现重复注册,重复注册表会报错
 */
func init()  {
    //1.连接数据库,参数一是数据库别名:因为一个项目可能连接多个数据库,别名以作区分
    orm.RegisterDataBase("default","mysql","root:123456@tcp(127.0.0.1:3306)/class1?charset=utf8")
    //2.注册表
    orm.RegisterModel(new(User))
    //3.生成表 false:代表强制更新被禁止,一般都是禁止,因为不这样,每次运行都会清空表
    //true:代表是否查看表创建的过程:说白了打印sql语句
    orm.RunSyncdb("default",false,true) //会根据结构体生成一张表
}

mysql基本驱动操作数据库

package controllers

import (
    "github.com/astaxie/beego"
    "database/sql"
    _"github.com/go-sql-driver/mysql"
)

type MysqlController struct {
    beego.Controller
}

func (c *MysqlController) Get() {
    conn, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/class1?charset=utf8")
    if err!=nil {
        beego.Info("连接错误",err)
        return
    }
    /*
    创建表
    _,err = conn.Exec("create table userInfo(id int,name varchar(11)) ")
    if err!=nil {
        beego.Info("创建表错误",err)
        return
    }*/

    //插入数据
    /*_, err = conn.Exec("INSERT userInfo(id,name)VALUE (?,?)", 1, "lilei")
    if err!=nil {
        beego.Info("数据插入错误",err)
        return
    }*/

    //查询语句
    rows, e := conn.Query("SELECT * FROM userInfo")
    if e!=nil {
        beego.Info("数据查询错误",e)
        return
    }
    var id int
    var name string
    for rows.Next() {
        rows.Scan(&id,&name)
        beego.Info(id,name)
    }
    conn.Close()
    c.Ctx.WriteString("返回数据")
}

orm操作数据库

package controllers

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/orm"
    "classone/models"
)

//首先安装:go get github.com/astaxie/beego/orm

type OrmController struct {
    beego.Controller
}



func (c *OrmController) Get() {
    //查询
    o := orm.NewOrm()
    user:=models.User{Id:2}
    err := o.Read(&user)
    if err!=nil {
        beego.Info("查询失败",err)
        return
    }
    beego.Info(user.Name)

    c.Ctx.WriteString("返回数据")
}

type OrmUpdateController struct {
    beego.Controller
}

func (c *OrmUpdateController) Get() {

    //插入
    /*o := orm.NewOrm()
    user:=models.User{}
    //user.Id=2
    user.Name="zq1"
    _, e := o.Insert(&user)//返回值一是插入的行数
    if e!=nil {
        beego.Info("插入失败",e)
        return
    }*/

    //更新:需要先查询出来再更新
    o := orm.NewOrm()
    user:=models.User{Id:2}
    err := o.Read(&user)
    if err!=nil {
        beego.Info("查询失败",err)
        return
    }
    user.Name="pf2"
    _, e := o.Update(&user)
    if e!=nil {
        beego.Info("更新失败",e)
        return
    }

    //同理有删除,delete,删除直接删除即可,不需要先查询

    c.Ctx.WriteString("返回数据")
}
举报

相关推荐

Beego入门(二)

Beego入门(一)

beego

beego路由

beego环境

beego邮件发送

0 条评论