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{})
或者使用正则表达式限制类型
数字:
/?🆔int
/?:id([0-9])
/?🆔([\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

-------------表单验证-------------



用户名:

密码:


posted @ 2021-01-22 19:56  blackTree  阅读(382)  评论(0)    收藏  举报