你对beego一无所知?没关系,这篇文档会很好的详细介绍beego的各个方面,看这个文档之前首先确认你已经安装了beego,如果你没有安装的话,请看这篇beego安装指南最小应用一个最小最简单的应用如下代码所示:
[AppleScript]
纯文本查看
复制代码
把上面的代码保存为hello.go,然后通过命令行进行编译并执行: $ go build main.go $ ./hello 这个时候你可以打开你的浏览器,通过这个地址浏览http://127.0.0.1:8080返回“hello world” 那么上面的代码到底做了些什么呢? 1、首先我们引入了包github.com/astaxie/beego,我们知道Go语言里面引入包会深度优先的去执行引入包的初始化(变量和init函数,更多),beego包中会初始化一个BeeAPP的应用,初始化一些参数。 2、定义Controller,这里我们定义了一个struct为MainController,充分利用了Go语言的组合的概念,匿名包含了beego.Controller,这样我们的MainController就拥有了beego.Controller的所有方法。 3、定义RESTFul方法,通过匿名组合之后,其实目前的MainController已经拥有了Get、Post、Delete、Put等方法,这些方法是分别用来对应用户请求的Method函数,如果用户发起的是POST请求,那么就执行Post函数。所以这里我们定义了MainController的Get方法用来重写继承的Get函数,这样当用户GET请求的时候就会执行该函数。 4、定义main函数,所有的Go应用程序和C语言一样都是Main函数作为入口,所以我们这里定义了我们应用的入口。 5、Router注册路由,路由就是告诉beego,当用户来请求的时候,该如何去调用相应的Controller,这里我们注册了请求/的时候,请求到MainController。这里我们需要知道,Router函数的两个参数函数,第一个是路径,第二个是Controller的指针。 6、Run应用,最后一步就是把在1中初始化的BeeApp开启起来,其实就是内部监听了8080端口:Go默认情况会监听你本机所有的IP上面的8080端口 停止服务的话,请按ctrl+c 新建项目通过如下命令创建beego项目,首先进入gopath目录 bee create hello 这样就建立了一个项目hello,目录结构如下所示 ├── conf │ └── app.conf ├── controllers │ └── default.go ├── main.go ├── models ├── static │ ├── css │ ├── img │ └── js └── views └── index.tpl 开发模式通过bee创建的项目,beego默认情况下是开发模式。 我们可以通过如下的方式改变我们的模式: beego.RunMode = "pro" 或者我们在conf/app.conf下面设置如下: runmode = pro 以上两种效果一样。 开发模式中 开发模式下,如果你的目录不存在views目录,那么会出现类似下面的错误提示: 2013/04/13 19:36:17 [W] [stat views: no such file or directory] 模板会自动重新加载不缓存。 如果服务端出错,那么就会在浏览器端显示如下类似的截图: 路由设置路由的主要功能是实现从请求地址到实现方法,beego中封装了Controller,所以路由是从路径到ControllerInterface的过程,ControllerInterface的方法有如下:
[AppleScript]
纯文本查看
复制代码
这些方法beego.Controller都已经实现了,所以只要用户定义struct的时候匿名包含就可以了。当然更灵活的方法就是用户可以去自定义类似的方法,然后实现自己的逻辑。 用户可以通过如下的方式进行路由设置:
[AppleScript]
纯文本查看
复制代码
为了用户更加方便的路由设置,beego参考了sinatra的路由实现,支持多种方式的路由:
[AppleScript]
纯文本查看
复制代码
静态文件Go语言内部其实已经提供了http.ServeFile,通过这个函数可以实现静态文件的服务。beego针对这个功能进行了一层封装,通过下面的方式进行静态文件注册:
[AppleScript]
纯文本查看
复制代码
第一个参数是路径,url路径信息 第二个参数是静态文件目录(相对应用所在的目录) beego支持多个目录的静态文件注册,用户可以注册如下的静态文件目录:
[AppleScript]
纯文本查看
复制代码
设置了如上的静态目录之后,用户访问/images/login/login.png,那么就会访问应用对应的目录下面的images/login/login.png文件。如果是访问/static/img/logo.png,那么就访问public/img/logo.png文件。 过滤和中间件beego支持自定义过滤中间件,例如安全验证,强制跳转等 如下例子所示,验证用户名是否是admin,应用于全部的请求:
[AppleScript]
纯文本查看
复制代码
还可以通过参数进行过滤,如果匹配参数就执行
[AppleScript]
纯文本查看
复制代码
}) 当然你还可以通过前缀过滤
[AppleScript]
纯文本查看
复制代码
模板处理模板目录beego中默认的模板目录是views,用户可以把你的模板文件放到该目录下,beego会自动在该目录下的所有模板文件进行解析并缓存,开发模式下会每次重新解析,不做缓存。当然用户可以通过如下的方式改变模板的目录:
[AppleScript]
纯文本查看
复制代码
自动渲染beego中用户无需手动的调用渲染输出模板,beego会自动的在调用玩相应的method方法之后调用Render函数,当然如果你的应用是不需要模板输出的,那么你可以在配置文件或者在main.go中设置关闭自动渲染。 配置文件配置如下:
[AppleScript]
纯文本查看
复制代码
main.go文件中设置如下:
[AppleScript]
纯文本查看
复制代码
模板名称beego采用了Go语言内置的模板引擎,所有模板的语法和Go的一模一样,至于如何写模板文件,详细的请参考模板教程。 用户通过在Controller的对应方法中设置相应的模板名称,beego会自动的在viewpath目录下查询该文件并渲染,例如下面的设置,beego会在admin下面找add.tpl文件进行渲染:
[AppleScript]
纯文本查看
复制代码
我们看到上面的模板后缀名是tpl,beego默认情况下支持tpl和html后缀名的模板文件,如果你的后缀名不是这两种,请进行如下设置:
[AppleScript]
纯文本查看
复制代码
当你设置了自动渲染,然后在你的Controller中没有设置任何的TplNames,那么beego会自动设置你的模板文件如下:
[AppleScript]
纯文本查看
复制代码
也就是你对应的Controller名字+请求方法名.模板后缀,也就是如果你的Controller名是AddController,请求方法是POST,默认的文件后缀是tpl,那么就会默认请求/viewpath/AddController/POST.tpl文件。 lauout设计beego支持layout设计,例如你在管理系统中,其实整个的管理界面是固定的,支会变化中间的部分,那么你可以通过如下的设置:
[AppleScript]
纯文本查看
复制代码
在layout.html中你必须设置如下的变量:
[AppleScript]
纯文本查看
复制代码
beego就会首先解析TplNames指定的文件,获取内容赋值给LayoutContent,然后最后渲染layout.html文件。 目前采用首先把目录下所有的文件进行缓存,所以用户还可以通过类似这样的方式实现layout:
[AppleScript]
纯文本查看
复制代码
模板函数beego支持用户定义模板函数,但是必须在beego.Run()调用之前,设置如下:
[AppleScript]
纯文本查看
复制代码
定义之后你就可以在模板中这样使用了:
[AppleScript]
纯文本查看
复制代码
目前beego内置的模板函数有如下: markdown 实现了把markdown文本转化为html信息,使用方法{{markdown .Content}} dateformat 实现了时间的格式化,返回字符串,使用方法{{dateformat .Time "2006-01-02T15:04:05Z07:00"}} date 实现了类似PHP的date函数,可以很方便的根据字符串返回时间,使用方法{{date .T "Y-m-d H:i:s"}} compare 实现了比较两个对象的比较,如果相同返回true,否者false,使用方法{{compare .A .B}} substr 实现了字符串的截取,支持中文截取的完美截取,使用方法{{substr .Str 0 30}} html2str 实现了把html转化为字符串,剔除一些script、css之类的元素,返回纯文本信息,使用方法{{html2str .Htmlinfo}} str2html 实现了把相应的字符串当作HTML来输出,不转义,使用方法{{str2html .Strhtml}} htmlquote 实现了基本的html字符转义,使用方法{{htmlquote .quote}} htmlunquote 实现了基本的反转移字符,使用方法{{htmlunquote .unquote}} request处理我们经常需要获取用户传递的数据,包括Get、POST等方式的请求,beego里面会自动解析这些数据,你可以通过如下方式获取数据
[AppleScript]
纯文本查看
复制代码
使用例子如下:
[AppleScript]
纯文本查看
复制代码
如果你需要的数据可能是其他类型的,例如是int类型而不是int64,那么你需要这样处理:
[AppleScript]
纯文本查看
复制代码
更多其他的request的信息,用户可以通过this.Ctx.Request获取信息,关于该对象的属性和方法参考手册Request 文件上传在beego中你可以很容易的处理文件上传,就是别忘记在你的form表单中增加这个属性enctype="multipart/form-data",否者你的浏览器不会传输你的上传文件。 文件上传之后一般是放在系统的内存里面,如果文件的size大于设置的缓存内存大小,那么就放在临时文件中,默认的缓存内存是64M,你可以通过如下来调整这个缓存内存大小:
[AppleScript]
纯文本查看
复制代码
或者在配置文件中通过如下设置
[AppleScript]
纯文本查看
复制代码
beego提供了两个很方便的方法来处理文件上传:
[AppleScript]
纯文本查看
复制代码
该方法主要用于用户读取表单中的文件名the_file,然后返回相应的信息,用户根据这些变量来处理文件上传:过滤、保存文件等。
[AppleScript]
纯文本查看
复制代码
该方法是在GetFile的基础上实现了快速保存的功能 保存的代码例子如下:
[AppleScript]
纯文本查看
复制代码
JSON和XML输出beego当初设计的时候就考虑了API功能的设计,而我们在设计API的时候经常是输出JSON或者XML数据,那么beego提供了这样的方式直接输出: JSON数据直接输出,设置content-type为application/json:
[AppleScript]
纯文本查看
复制代码
XML数据直接输出,设置content-type为application/xml:
[AppleScript]
纯文本查看
复制代码
跳转和错误我们在做Web开发的时候,经常会遇到页面调整和错误处理,beego这这方面也进行了考虑,通过Redirect方法来进行跳转:
[AppleScript]
纯文本查看
复制代码
@todo 错误处理还需要后期改进 response处理response可能会有集中情况: 模板输出 模板输出上面模板介绍里面已经介绍,beego会在执行完相应的Controller里面的对应的Method之后输出到模板。 跳转 上一节介绍的跳转就是我们经常用到的页面之间的跳转 字符串输出 有些时候我们只是想输出相应的一个字符串,那么我们可以通过如下的代码实现 this.Ctx.WriteString("ok") Sessionsbeego内置了session模块,目前session模块支持的后端引擎包括memory、file、mysql、redis四中,用户也可以根据相应的interface实现自己的引擎。 beego中使用session相当方便,只要在main入口函数中设置如下:
[AppleScript]
纯文本查看
复制代码
或者通过配置文件配置如下:
[AppleScript]
纯文本查看
复制代码
通过这种方式就可以开启session,如何使用session,请看下面的例子:
[AppleScript]
纯文本查看
复制代码
上面的例子中我们知道session有几个方便的方法:
[AppleScript]
纯文本查看
复制代码
session操作主要有设置session、获取session、删除session 当然你要可以通过下面的方式自己控制相应的逻辑这些逻辑:
[AppleScript]
纯文本查看
复制代码
sess对象具有如下方法:
[AppleScript]
纯文本查看
复制代码
但是我还是建议大家采用SetSession、GetSession、DelSession三个方法来操作,避免自己在操作的过程中资源没释放的问题。 关于Session模块使用中的一些参数设置: SessionOn 设置是否开启Session,默认是false,配置文件对应的参数名:sessionon SessionProvider 设置Session的引擎,默认是memory,目前支持还有file、mysql、redis等,配置文件对应的参数名:sessionprovider SessionName 设置cookies的名字,Session默认是保存在用户的浏览器cookies里面的,默认名是beegosessionID,配置文件对应的参数名是:sessionname SessionGCMaxLifetime 设置Session过期的时间,默认值是3600秒,配置文件对应的参数:sessiongcmaxlifetime SessionSavePath 设置对应file、mysql、redis引擎的保存路径或者链接地址,默认值是空,配置文件对应的参数:sessionsavepath 当SessionProvider为file时,SessionSavePath是只保存文件的目录,如下所示:
[AppleScript]
纯文本查看
复制代码
当SessionProvider为mysql时,SessionSavePath是链接地址,采用go-sql-driver,如下所示:
[AppleScript]
纯文本查看
复制代码
当SessionProvider为redis时,SessionSavePath是redis的链接地址,采用了redigo,如下所示:
[AppleScript]
纯文本查看
复制代码
Cache设置beego内置了一个cache模块,实现了类似memcache的功能,缓存数据在内存中,主要的使用方法如下:
[AppleScript]
纯文本查看
复制代码
|