Beego框架学习整理

Beego框架学习整理,第1张

Beego的介绍与使用

文章目录 Beego的介绍与使用一、路由普通路由正则路由自定义控制器与路由规则自动匹配路由 二、从Body、请求中获取数据获取数据Paramsjsonformfile 三、Cokkie获取客户端的cookie设置客户端的cookie设置客户端中的secret cookie获取客户端中的secret cookie 四、响应响应文字内容响应模板文件响应json重定向 五、获取header中的信息六、实现模板中的变量或函数七、Beego中的配置参数配置

一、路由 普通路由
package main

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

	"github.com/astaxie/beego"
)

func main() {
	// 绑定函数
	//以get方式请求根路径时,通过绑定函数处理
	beego.Get("/", func(ctx *context.Context) {
		//用户数据的获取
		name := ctx.Input.Query("name")
		// 给用户相应数据
		ctx.Output.Context.WriteString("你输入的名字是" + name)
	})

	// 处理POST请求
	beego.Post("/", func(ctx *context.Context) {
		// 用户数据的获取
		age := ctx.Input.Query("age")
		// 给用户相应数据
		ctx.Output.Context.WriteString("age = " + age)
	})

	// 相同location下,顺序绑定函数
	beego.Any("/getmethod", func(ctx *context.Context) {
		method := ctx.Input.Method()
		// 返回方法
		ctx.Output.Context.WriteString("method = " + method)
	})

	beego.Run(":7788")
}
正则路由
package main

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

	"github.com/astaxie/beego"
)

func main() {

	//正则路由
	// URL中定义正则字符串的方式进行匹配
	// 匹配/数字/格式的路由 => 并把匹配的值放入到id参数中
	beego.Get("/?:id(^\d+$)/", func(ctx *context.Context) {
		id := ctx.Input.Param(":id")
		ctx.WriteString("匹配数字 = " + id)
	})

	beego.Get("/:name(^\w+$)", func(ctx *context.Context) {
		name := ctx.Input.Param(":name")
		ctx.WriteString("匹配name = " + name)
	})

	//匹配任意
	beego.Get("/:content/", func(ctx *context.Context) {
		content := ctx.Input.Param(":content")
		ctx.WriteString("任意都能匹配 = " + content)
	})

	// 获取文件名
	beego.Get("/file/:file(.*)", func(ctx *context.Context) {
		file := ctx.Input.Param(":file")
		ctx.WriteString("匹配file = "+ file)
	})

	beego.Run(":7788")
}

自定义控制器与路由规则
package main

import "github.com/astaxie/beego"

type PostControler struct {
	beego.Controller
}

func (p *PostControler) Add() {
	p.Ctx.WriteString("调用post的add方法")
}

func (p *PostControler) Query() {
	p.Ctx.WriteString("调用post的Query方法")
}

func main() {
	// post请求交给Add处理,get请求交给qurrey处理
	//分好分割路由规则
	beego.Router("/post/add", &PostControler{},"get:Query;post:Add")
	beego.Run(":7788")
}
自动匹配路由
package main

import "github.com/astaxie/beego"

type Task struct {
	beego.Controller
}

func (t *Task) Del() {
	t.Ctx.WriteString("调用del方法:" + t.Ctx.Input.URI() + "method = " + t.Ctx.Input.Method())
}

func main() {
	// 自动路由
	// task ==> taskcontroller,/task/del  会到Task.Del
	beego.AutoRouter(&Task{})
	beego.Run(":7788")
}
二、从Body、请求中获取数据 获取数据 Params
package main

import (
	"fmt"

	"github.com/astaxie/beego"
)

type InputController struct {
	beego.Controller
}

type InPutForm struct {
	Name string `form:"name"`
}

func (i *InputController) QueryParams() {
	// 拿到url参数的方法:
	// 1、使用原生http.Request.ParseForm,拿到http.Request.Form
	// 2、调用beego的input.Query方法,其实内部也是http包的一个封装
	name := i.Ctx.Input.Query("name")
	i.Ctx.WriteString(fmt.Sprintf("name = %s\n", name))

	// 3、通过scan的方式将结果扫描给一个变量
	var name1 string
	i.Ctx.Input.Bind(&name1, "name1")
	i.Ctx.WriteString(fmt.Sprintf("name1 = %s\n", name1))

	// 4、使用controller的getstring方法
	name2 := i.GetString("name2")
	i.Ctx.WriteString(fmt.Sprintf("name2 = %s\n", name2))

	// 5、将参数解析到结构体中(通过反射原理)
	var Form InPutForm
	i.ParseForm(&Form)
	i.Ctx.WriteString(fmt.Sprintf("Form.Name = %s\n", Form.Name))
}

func (c *InputController) GetDataFromUrlAndBody() {
	name := c.GetString("name")
	c.Ctx.WriteString(fmt.Sprintf("GetDataFromUrlAndBody.Name = %s\n", name))
}

func main() {
	// 提交数据的方式:
	// Get ?queryoaram
	// Post ?queryoarams
	// request budy
	// content-type:
	// 1、application/json
	// 2、multipart
	// 3、application/x-www-form-urlencoded

	beego.AutoRouter(&InputController{})
	beego.Run(":7788")
}
json

beego默认不会处理body中的数据,需要手动在conf/app.conf配置文件添加 CopyRequestBody = true

func (i *InputController) Json() {
	// beego默认不会处理body中的数据,需要手动在配置文件添加 CopyRequestBody = true
	// data := i.Ctx.Input.CopyBody(10 * 1024 * 1024)
	// var inputjson *InputJson
	var inputjson map[string]interface{}
	err := json.Unmarshal(i.Ctx.Input.RequestBody, &inputjson)
	if err != nil {
		fmt.Println("json err", err)
		i.Ctx.WriteString(string(err.Error()))
		return
	}
	fmt.Println(inputjson)
	i.Ctx.WriteString("OK")
}
form
func (i *InputController) Form() {
	form1 := i.GetString("form1") 
	i.Ctx.WriteString("form1 = " +  form1)
}
file
func (i *InputController) File() {
	// 1使用request对象
	// 2、使用controller中的getfile
	// i.GetFile("name")
	//3、saveto
	filename := i.GetString("img")
	i.SaveToFile("img", "./upload/a.jpg")
	i.Ctx.WriteString(fmt.Sprintf("filename = %s\n", filename))
}
三、Cokkie 获取客户端的cookie
func (c *CookieController) GetCookie() {
	// //1、第一种方式
	// cokkie, err := c.Ctx.Request.Cookie("name")
	// if err != nil {
	// 	c.Ctx.WriteString(err.Error())
	// }
	// c.Ctx.WriteString(cokkie.Name + cokkie.Value)

	// 2、 对第一种方式的一种封装
	name := c.Ctx.Input.Cookie("name")
	c.Ctx.WriteString(name)
}

设置客户端的cookie
func (c *CookieController) Setcokkie() {
	c.Ctx.SetCookie("name", "chenteng")
	c.Ctx.WriteString("set cookie ok")
}
设置客户端中的secret cookie

使用密钥设置secret cookie,使cokkie加密,防止客户端对cokkie进行篡改

func (c *CookieController) SetSecretcokkie() {
	c.Ctx.SetSecureCookie(CokkieKey, "key", "value")
	c.Ctx.WriteString("SetSecretcokkie ok ")
}

获取客户端中的secret cookie
func (c *CookieController) GetSecretcokkie() {
	value, ok := c.Ctx.GetSecureCookie(CokkieKey, "key")
	if !ok {
		c.Ctx.WriteString("获取sec cookie 失败")
	}
	fmt.Println("value = ", value)
	c.Ctx.WriteString("GetSecretcokkie ok ")
}
四、响应 响应文字内容
// 第一种发送
func (c *OutputController) Write() {
	c.Ctx.WriteString("内容")
}

// 第二种发送
func (c *OutputController) OutPutWriteString() {
	c.Ctx.Output.Context.WriteString("内容")
}

// 第三种发送
func (c *OutputController) OutPutBody() {
	c.Ctx.Output.Body([]byte("内容"))
}
响应模板文件
// 响应模板文件
func (c *OutputController) Tpl() {
	c.TplName = "output.html"
}

响应json
func (c *OutputController) Json() {
	c.Data["json"] = map[string]string{"a": "123", "b": "yyy"}
	c.ServeJSON()
}

重定向
func (c *OutputController) Redir() {
	c.Redirect("http://www.baidu.com", 302)
}
五、获取header中的信息

header是一个map

func (c *OutputController) GetHeader() {
	method := c.Ctx.Request.Method
	url := c.Ctx.Request.URL
	header := c.Ctx.Request.Header["User-Agent"]
	fmt.Fprintf(c.Ctx.ResponseWriter, "method = %v \n,url = %v, \nheader.User-Agent = %v", method, url, header)
}
六、实现模板中的变量或函数

向html文件中发送数据,与自定义函数

先看一下index.html

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=100, initial-scale=1.0">
    <title>indextitle>
head>
<body>
    <h1>我是主页 indexh1>
    <p>name = {{.name}}p>
    <h2>if语句h2>
    {{if .Gender}}
    男
    {{ else }}
    女
    {{end}}<br />
    <h2>遍历切片h2>
    {{ range $index,$value := .scores }}
    {{$index}} = {{$value}}<br />
    {{end}}
    <h2>遍历maph2>
    {{range $userid,$username := .users }}
    {{$userid}} : {{$username}}<br />
    {{end}}

    <h2>调用函数h2>
    {{lower .content}}
body>
html>

后端代码如下:

package main

import (
	"strings"

	"github.com/astaxie/beego"
)

type HomeController struct {
	beego.Controller
}

func (c *HomeController) Index() {
	c.Data["name"] = "chenteng" // 向模板中传递数据
	c.Data["Gender"] = true     // 想模板中传递布尔值
	c.Data["scores"] = []float32{1, 2, 3}
	c.Data["users"] = map[int]string{1: "chenteng", 2: "zhangfei"}
	c.TplName = "index.html" // 默认后缀只支持html,tpl
	c.Data["content"] = "ChenTeng"
}

func main() {
	beego.AddFuncMap("lower", func(in string) string {
		return strings.ToLower(in)
	})
	beego.AutoRouter(&HomeController{})
	beego.Run(":7788")
}

页面显示

七、Beego中的配置 参数配置

beego 目前支持 INI、XML、JSON、YAML 格式的配置文件解析,但是默认采用了 INI 格式解析,用户可以通过简单的配置就可以获得很大的灵活性
beego 默认会解析当前应用下的 conf/app.conf 文件。

通过这个文件你可以初始化很多 beego 的默认参数:

appname = "{$appname||myapp}"  ## 从环境变量中获取配置,并带有默认值
httpaddr = "127.0.0.1"
httpport = 9090
runmode ="dev"   ## 可以再页面上看到错误信息,生产模式只会在后台报错
autorender = false
recoverpanic = false
viewspath = "myview"  ## 默认文件夹
StaticDir=“static”  ## 静态文件文件夹
CopyRequestbody = true ## 拷贝body数据
MaxMemry = 104857600  ## 上传文件缓存内存
ServerName=chenteng 
include "app2.conf"  ## 加载其他配置文件,有相同key会被覆盖掉

上面这些参数会替换 beego 默认的一些参数, beego 的参数主要有哪些呢?
请参考https://godoc.org/github.com/astaxie/beego#pkg-constants 。
BConfig 就是 beego 里面的默认的配置,你也可以直接通过beego.BConfig.AppName="beepkg"这样来修改,
和上面的配置效果一样,只是一个在代码里面写死了, 而配置文件就会显得更加灵活。

你也可以在配置文件中配置应用需要用的一些配置信息,例如下面所示的数据库信息:

mysqluser = "root"
mysqlpass = "rootpass"
mysqlurls = "127.0.0.1"
mysqldb   = "beego"

那么你就可以通过如下的方式获取设置的配置信息:

beego.AppConfig.String("mysqluser")
beego.AppConfig.String("mysqlpass")
beego.AppConfig.String("mysqlurls")
beego.AppConfig.String("mysqldb")

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/993854.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存