beego基础-Controller模块

beego基础-Controller模块

本节掌握的知识点
1.读取配置文件信息
2.自动路由规则

*固定路由
*正则路由
*自动路由
*自定义路由

3.自定义过滤器
4.表单验证

1.读取配置文件信息

conf/app.conf 主配置文件,其他文件需要在app.conf里面再引入一次
若其他配置文件和主配置文件的参数同名,以主配置文件为主

其他常用配置
ViewsPath
StaticDir
sessionon
EnalbleXSRF
XSRFExpire
MaxMemory
RunMode
不做详细解释,官方有资料

2.自动路由规则

*固定路由

    直接设置地址名
    beego.Router("/地址名", &controllers.Controller{})

*正则路由

    beego.Router("/?:参数名:类型", &controllers.Controller{})    
    或者使用正则表达式限制类型
    数字:
    /?:id:int
    /?:id([0-9])
    /?:id:([\d+])
    字符串:
    /?username([\w]+)
    /?username:string

*自动路由

    注册路由的时候不需要指定url
    beego.AutoRouter(&controllers.Controller{})
    规则:
    地址/控制器名(`controllers`)/方法名/参数
    eg: 127.0.0.1:8080/controllers/get/123

*自定义路由

    router.go
    //第三个参数设置函数名称对应View传过来的方法
    beego.Router("/custom", &controllers.Controller{}, "get:List")

    controllers.go    
    //...自定义路由
    func (c_controller *Controller) List() {

        c_controller.TplName = "v_controller.html"
        c_controller.Ctx.WriteString("Custom Router")
    }
    get提交会自动使用List()方法

3.自定义过滤器

在app.confg 打开session 功能
beego.Run()前面使用过滤器
设置需要给name设置session过后才能访问网页

第一个参数: 需要过滤的路由

第二个参数:过滤器使用的时间(不做详细解释,官方有资料)

beego.BeforeStatic
beego.BeforeRouter
beego.BeforeExec
beego.AfterExec
beego.FinishRouter

第三个个参数:过滤时调用的函数

@note:session的Filter 需要在BeforStatic之后才能获取,之前session还没有初始

main.go

beego.InsertFilter("/success/*", beego.BeforeRouter, context.MyFilter)
//过滤器

新建一个context.go
package context

import (
    "github.com/astaxie/beego/context"//注意!是beego 下的context包
)
//是否给name设置session    
func MyFilter(ctx *context.Context) {

    name := ctx.Input.Session("name")
    if nil == name {
        ctx.WriteString("没有设置session")
    } else {
        ctx.WriteString("登陆")
    }
}

c_controllers.go
//设置session
c_controller.SetSession("name", "JOJO")
c_controller.Ctx.WriteString("设置Session")

//重启项目会清除session 

4.表单验证

需要的依赖包
"github.com/astaxie/beego/validation"
执行 go mod vender 后,mod会帮我们把项目依赖给搬到工程目录,在工程目录会出现vender的文件夹

c_controller.go

"github.com/astaxie/beego/validation"

//注意要被外部访问成员首字母大写
type Check struct {
    Name     string `form:"name" valid:"Required"`
    Password string `form:"password" valid:"Required"`
    //vail要求表单不能为空
}


func (c_controller *Controller) Post() {

    //表单验证
    var check Check
    c_controller.ParseForm(&check)
    fmt.Println(check)

    //重定义错误信息
    // MessageTmpls store commond validate template
    var MessageTmpls = map[string]string{
        "Required":     "不能为空",
    }
    validation.SetDefaultMessage(MessageTmpls)

    //校验
    valid := validation.Validation{}

    b, _ := valid.Valid(&check)
    if b {
        c_controller.Ctx.WriteString("success")
    } else {
        for _, err := range valid.Errors {
            fmt.Println(err.Key + err.Message)
        }
        c_controller.Ctx.WriteString("fail")
    }

}

v_controller.html

-------------表单验证-------------<br>
<!-- 表单验证 -->
<form action="/" method="post">
    用户名:<input type="text" name="name" ><br>
    密码:<input type="text" name="password" ><br>
    <input type="submit" value="提交">
</form>
posted @   blackTree  阅读(348)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示