beego -- 初学二
beego 初学 --- 二1.配置文件
beego的配置文件在conf目录下,同时也支持INI,XML,JSON,YAML格式的解析,默认是xxx.conf。
在配置文件中,我们可以修改一些默认的设置。例如,数据库配置
,还有其他获取方法,详情见文档~~~
同时也支持不同级别的配置,如:
【dev】(默认)
// 测试环境下配置
【prod】
// 生产环境配置
【test】
//测试环境配置
读取不同配置参数方法:beego.AppConfig.String("dev::mysqluser")
在配置文件中,支持通过include "xxx.conf" 来引入另外一个配置文件。另外,默认的配置路径是‘conf/app.conf’,可以通过
beego.LoadAppConfig("init","cong/xxx.conf") 来修改配置路径,第一个参数的文件类型,第二个是文件路径。
列举一些常见的配置
AppName应用名称beego.BConfig.AppName = "beego"
RunMode应用运行模式(默认是dev)beego.BConfig.RunMode = "dev"
RouterCaseSensitive是否忽略路由匹配大小写(默认是true)beego.BConfig.RouterCaseSensitive = true
MaxMemory文件上传默认内存缓存大小,默认值是 1 << 26(64M) beego.BConfig.MaxMemory = 1 << 26
AutoRender是否自动渲染,(默认true)beego.BConfig.WebConfig.AutoRender = true
FlashNameFlash 数据设置时 Cookie 的名称,默认是 BEEGO_FLASHbeego.BConfig.WebConfig.FlashName = "BEEGO_FLASH"
StaticDir静态文件目录设置,默认是static可设置多个beego.SetStaticPath("/download","download")
EnableXSRF是否开启 XSRF,默认为 false,不开启beego.BConfig.WebConfig.EnableXSRF = false
XSRFKEY只有开启XSRF才能生效,默认是beegoxsrf beego.BConfig.WebConfig.XSRFKEY = "beegoxsrf"
XSRFExpirexsrf 过期时间,默认是0,不过期beego.BConfig.WebConfig.XSRFExpire = 0
Graceful是否开启热升级,默认是falsebeego.BConfig.Listen.Graceful=false
ServerTimeOut设置http超时时间,默认是0,不超时beego.BConfig.Listen.ServerTimeOut=0
EnableHTTP是否启用http监听,默认是truebeego.BConfig.Listen.EnableHTTP = true
HTTP(s)Addr监听地址beego.BConfig.Listen.HTTPAddr = ""
HTTP(s)Port监听端口beego.BConfig.Listen.HTTPPort = 8080
EnableHTTPS是否启用HTTPS,默认是false,开启要设置为true,并配置HTTPSCertFile 和 HTTPSKeyFilebeego.BConfig.Listen.EnableHTTPS = false
HTTPSCertFilessl 证书路径beego.BConfig.Listen.HTTPSCertFile = "conf/ssl.crt"
HTTPSKeyFileSSL 证书 keyfile 的路径eego.BConfig.Listen.HTTPSKeyFile = "conf/ssl.key"
AdminPort程序监听地址beego.BConfig.Listen.AdminPort = 8088
SessionOn是否开启session ,默认的falsebeego.BConfig.WebConfig.Session.SessionOn = false
SessionName客户端cookie名称,beego.BConfig.WebConfig.Session.SessionName = "beegosessionID"
SessionGCMaxLifetimesession过期时间beego.BConfig.WebConfig.Session.SessionGCMaxLifetime = 3600
SessionAutoSetCookie是否开启SetCookie, 默认值 true 开启。beego.BConfig.WebConfig.Session.SessionAutoSetCookie = true
SessionDomainsession cookie 存储域名, 默认空。beego.BConfig.WebConfig.Session.SessionDomain = ""
2. 路由
在了解路由之前,先了解beego运行的原理及过程
所以,当用户第一次访问beego服务时,会先通过路由过滤器进行匹配,在beego中,路由配置一般在routers目录下,通过beego.Router("路由路径", 对应的&controllers,"指定访问方法:指定controllers的方法"})。如:
beego.Router("/article/del",&controllers.ArticleController{},"get:EditDo")一旦访问http://xxx/atricle/del ,如果不是get方法则会报错(404),通过get方式访问,会调用
ArticleController里面EditDo的方法,方法名首字母要大写。也可以写成:beego.Get("/", controllers.ArticleController.EditDo)/post/put/delete...。正则路由:通过一定正则表达式来匹配路由路径 beego.Router("/api/?:id", &controllers.TestController{}) //http://xxx/api/4545,其中id = 4545
// 不加?无法访问xx/api2/,加了就可以
beego.Router("/api2/:id", &controllers.TestController{})
// 匹配数字
beego.Router("/api3/:id(+)", &controllers.TestController{})
beego.Router("/api3/:id:int", &controllers.TestController{})
// 匹配字符串
beego.Router("/api4/:username([\\w]+)", &controllers.TestController{})
beego.Router("/api4/:username:string", &controllers.TestController{})
// 匹配全部
beego.Router("/api5/*", &controllers.TestController{})....还有其他匹配方式要怎么获取,通过c.Ctx.Input.Param(":id")3. Controller层主要负责逻辑的编写与实现,需要继承beego.Controller。type xxxController struct {
beego.Controller}相关方法:
Init(ct *context.Context, childName string, app interface{}) 这个函数主要初始化了 Context、相应的 Controller 名称,模板名,初始化模板参数的容器 Data,app 即为当前执行的 Controller 的 reflecttype
Prepare()用户扩展
Get() 户请求的 HTTP Method 是 GET,那么就执行该函数
Post()用户请求的 HTTP Method 是 POST,那么就执行该函数
Delete()户请求的 HTTP Method 是 DELETE
Put() 用户请求的 HTTP Method 是 PUT
Head()用户请求的 HTTP Method 是 HEAD,那么就执行该函数
Patch() 用户请求的 HTTP Method 是 PATCH
Options() 用户请求的HTTP Method是OPTIONS
Finish() 这个函数是在执行完相应的 HTTP Method 方法之后执行的,默认是空
例子:
news.go
package controllers
import (
"fmt"
"github.com/astaxie/beego"
)
type NewsController struct {
beego.Controller
}
func (c *NewsController) Get(){
c.Data["content"] = "value" //数据绑定
c.Layout = "index.tpl"
c.TplName = "login.html" // 绑定模板页面
}
type Info struct {
Name string `form:"name" json:"name"`
Pwd string `form:"pwd" json:"pwd"`
}
func (c *NewsController)Post(){
name := c.GetString("name")
pwd := c.GetString("pwd")
a := Info{}
if len(pwd) > 0{
err :=c.ParseForm(&a) //解析结构体
if err != nil {
//beego.Info("结构体解析失败",err)
fmt.Println("结构体解析失败",err)
}else {
fmt.Println("Info:",a)
}
}
fmt.Println("获取到信息",name,pwd)
c.Ctx.WriteString(name)
}package routers
import (
"beegoodemoal/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/new",&controllers.NewsController{},"get:Get")
beego.Router("/news",&controllers.NewsController{},"post:Post")}
页:
[1]