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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗