添加两个文档
Showing
1 changed file
with
221 additions
and
10 deletions
| ... | @@ -9,16 +9,19 @@ | ... | @@ -9,16 +9,19 @@ |
| 9 | - [路由设置](#-4) | 9 | - [路由设置](#-4) |
| 10 | - [静态文件](#-5) | 10 | - [静态文件](#-5) |
| 11 | - [过滤和中间件](#-6) | 11 | - [过滤和中间件](#-6) |
| 12 | - [模板处理](#-7) | 12 | - [Controller设计](#-7) |
| 13 | - [request处理](#-8) | 13 | - [模板处理](#-8) |
| 14 | - [跳转和错误](#-9) | 14 | - [request处理](#-9) |
| 15 | - [response处理](#-10) | 15 | - [跳转和错误](#-10) |
| 16 | - [Sessions](#-11) | 16 | - [response处理](#-11) |
| 17 | - [Cache设置](#-12) | 17 | - [Sessions](#-12) |
| 18 | - [安全的Map](#-13) | 18 | - [Cache设置](#-13) |
| 19 | - [日志处理](#-14) | 19 | - [安全的Map](#-14) |
| 20 | - [第三方应用集成](#-15) | 20 | - [日志处理](#-15) |
| 21 | - [部署编译应用](#-16) | 21 | - [配置管理](#-16) |
| 22 | - [beego参数](#-17) | ||
| 23 | - [第三方应用集成](#-18) | ||
| 24 | - [部署编译应用](#-19) | ||
| 22 | 25 | ||
| 23 | ## 最小应用 | 26 | ## 最小应用 |
| 24 | 一个最小最简单的应用如下代码所示: | 27 | 一个最小最简单的应用如下代码所示: |
| ... | @@ -204,6 +207,94 @@ beego謾ッ謖∬螳壻ケ芽ソサ、荳ュ髣エ莉カ御セ句ヲょョ牙鬪瑚ッシ悟シコ蛻カ霍ウ霓ャ遲 | ... | @@ -204,6 +207,94 @@ beego謾ッ謖∬螳壻ケ芽ソサ、荳ュ髣エ莉カ御セ句ヲょョ牙鬪瑚ッシ悟シコ蛻カ霍ウ霓ャ遲 |
| 204 | dosomething() | 207 | dosomething() |
| 205 | }) | 208 | }) |
| 206 | 209 | ||
| 210 | ## Controller设计 | ||
| 211 | 基于beego的Controller设计,只需要匿名组合`beego.Controller`就可以了,如下所示: | ||
| 212 | |||
| 213 | type xxxController struct { | ||
| 214 | beego.Controller | ||
| 215 | } | ||
| 216 | |||
| 217 | `beego.Controller`实现了接口`beego.ControllerInterface`,`beego.ControllerInterface`定义了如下函数: | ||
| 218 | |||
| 219 | - Init(ct *Context, cn string) | ||
| 220 | |||
| 221 | 这个函数主要初始化了Context、相应的Controller名称,模板名,初始化模板参数的容器Data | ||
| 222 | |||
| 223 | - Prepare() | ||
| 224 | |||
| 225 | 这个函数主要是为了用户扩展用的,这个函数会在下面定义的这些Method方法之前执行,用户可以重写这个函数实现类似用户验证之类。 | ||
| 226 | |||
| 227 | - Get() | ||
| 228 | |||
| 229 | 如果用户请求的HTTP Method是GET, 那么就执行该函数,默认是403,用户继承的子struct中可以实现了该方法以处理Get请求. | ||
| 230 | |||
| 231 | - Post() | ||
| 232 | |||
| 233 | 如果用户请求的HTTP Method是POST, 那么就执行该函数,默认是403,用户继承的子struct中可以实现了该方法以处理Post请求. | ||
| 234 | |||
| 235 | - Delete() | ||
| 236 | |||
| 237 | 如果用户请求的HTTP Method是DELETE, 那么就执行该函数,默认是403,用户继承的子struct中可以实现了该方法以处理Delete请求. | ||
| 238 | |||
| 239 | - Put() | ||
| 240 | |||
| 241 | 如果用户请求的HTTP Method是PUT, 那么就执行该函数,默认是403,用户继承的子struct中可以实现了该方法以处理Put请求. | ||
| 242 | |||
| 243 | - Head() | ||
| 244 | |||
| 245 | 如果用户请求的HTTP Method是HEAD, 那么就执行该函数,默认是403,用户继承的子struct中可以实现了该方法以处理Head请求. | ||
| 246 | |||
| 247 | - Patch() | ||
| 248 | |||
| 249 | 如果用户请求的HTTP Method是PATCH, 那么就执行该函数,默认是403,用户继承的子struct中可以实现了该方法以处理Patch请求. | ||
| 250 | |||
| 251 | - Options() | ||
| 252 | |||
| 253 | 如果用户请求的HTTP Method是OPTIONS, 那么就执行该函数,默认是403,用户继承的子struct中可以实现了该方法以处理Options请求. | ||
| 254 | |||
| 255 | - Finish() | ||
| 256 | |||
| 257 | 这个函数实在执行完相应的http Method方法之后执行的,默认是空,用户可以在子Strcut中重写这个函数,执行例如数据库关闭,清理数据之类的工作 | ||
| 258 | |||
| 259 | - Render() error | ||
| 260 | |||
| 261 | 这个函数主要用来实现渲染模板,如果beego.AutoRender为true的情况下才会执行。 | ||
| 262 | |||
| 263 | 所以通过子struct的方法重写,用户就可以实现自己的逻辑,接下来我们看一个实际的例子: | ||
| 264 | |||
| 265 | type AddController struct { | ||
| 266 | beego.Controller | ||
| 267 | } | ||
| 268 | |||
| 269 | func (this *AddController) Prepare() { | ||
| 270 | |||
| 271 | } | ||
| 272 | |||
| 273 | func (this *AddController) Get() { | ||
| 274 | this.Data["content"] ="value" | ||
| 275 | this.Layout = "admin/layout.html" | ||
| 276 | this.TplNames = "admin/add.tpl" | ||
| 277 | } | ||
| 278 | |||
| 279 | func (this *AddController) Post() { | ||
| 280 | pkgname := this.GetString("pkgname") | ||
| 281 | content := this.GetString("content") | ||
| 282 | pk := models.GetCruPkg(pkgname) | ||
| 283 | if pk.Id == 0 { | ||
| 284 | var pp models.PkgEntity | ||
| 285 | pp.Pid = 0 | ||
| 286 | pp.Pathname = pkgname | ||
| 287 | pp.Intro = pkgname | ||
| 288 | models.InsertPkg(pp) | ||
| 289 | pk = models.GetCruPkg(pkgname) | ||
| 290 | } | ||
| 291 | var at models.Article | ||
| 292 | at.Pkgid = pk.Id | ||
| 293 | at.Content = content | ||
| 294 | models.InsertArticle(at) | ||
| 295 | this.Ctx.Redirect(302, "/admin/index") | ||
| 296 | } | ||
| 297 | |||
| 207 | ## 模板处理 | 298 | ## 模板处理 |
| 208 | ### 模板目录 | 299 | ### 模板目录 |
| 209 | beego中默认的模板目录是`views`,用户可以把你的模板文件放到该目录下,beego会自动在该目录下的所有模板文件进行解析并缓存,开发模式下会每次重新解析,不做缓存。当然用户可以通过如下的方式改变模板的目录: | 300 | beego中默认的模板目录是`views`,用户可以把你的模板文件放到该目录下,beego会自动在该目录下的所有模板文件进行解析并缓存,开发模式下会每次重新解析,不做缓存。当然用户可以通过如下的方式改变模板的目录: |
| ... | @@ -219,6 +310,12 @@ beego荳ュ逕ィ謌キ譌髴謇句勘逧ー畑貂イ譟楢セ灘讓。譚ソ恵eego莨夊蜉ィ逧惠隹 | ... | @@ -219,6 +310,12 @@ beego荳ュ逕ィ謌キ譌髴謇句勘逧ー畑貂イ譟楢セ灘讓。譚ソ恵eego莨夊蜉ィ逧惠隹 |
| 219 | main.go文件中设置如下: | 310 | main.go文件中设置如下: |
| 220 | 311 | ||
| 221 | beego.AutoRender = false | 312 | beego.AutoRender = false |
| 313 | |||
| 314 | ### 模板数据 | ||
| 315 | 模板中的数据是通过在Controller中`this.Data`获取的,所以如果你想在模板中获取内容`{{.Content}}`,那么你需要在Controller中如下设置: | ||
| 316 | |||
| 317 | this.Data["Context"] = "value" | ||
| 318 | |||
| 222 | ### 模板名称 | 319 | ### 模板名称 |
| 223 | beego采用了Go语言内置的模板引擎,所有模板的语法和Go的一模一样,至于如何写模板文件,详细的请参考[模板教程](https://github.com/astaxie/build-web-application-with-golang/blob/master/ebook/07.4.md)。 | 320 | beego采用了Go语言内置的模板引擎,所有模板的语法和Go的一模一样,至于如何写模板文件,详细的请参考[模板教程](https://github.com/astaxie/build-web-application-with-golang/blob/master/ebook/07.4.md)。 |
| 224 | 321 | ||
| ... | @@ -681,6 +778,120 @@ LevelTrace縲´evelDebug縲´evelInfo縲´evelWarning縲 LevelError縲´evelCritical | ... | @@ -681,6 +778,120 @@ LevelTrace縲´evelDebug縲´evelInfo縲´evelWarning縲 LevelError縲´evelCritical |
| 681 | } | 778 | } |
| 682 | } | 779 | } |
| 683 | 780 | ||
| 781 | ## 配置管理 | ||
| 782 | beego支持解析ini文件, beego默认会解析当前应用下的`conf/app.conf`文件 | ||
| 783 | |||
| 784 | 通过这个文件你可以初始化很多beego的默认参数 | ||
| 785 | |||
| 786 | appname = beepkg | ||
| 787 | httpaddr = "127.0.0.1" | ||
| 788 | httpport = 9090 | ||
| 789 | runmode ="dev" | ||
| 790 | autorender = false | ||
| 791 | autorecover = false | ||
| 792 | viewspath = "myview" | ||
| 793 | |||
| 794 | 上面这些参数会替换beego默认的一些参数。 | ||
| 795 | |||
| 796 | 你可以在配置文件中配置应用需要用的一些配置信息,例如下面所示的数据库信息: | ||
| 797 | |||
| 798 | mysqluser = "root" | ||
| 799 | mysqlpass = "rootpass" | ||
| 800 | mysqlurls = "127.0.0.1" | ||
| 801 | mysqldb = "beego" | ||
| 802 | |||
| 803 | 那么你就可以通过如下的方式获取设置的配置信息: | ||
| 804 | |||
| 805 | beego.AppConfig.String("mysqluser") | ||
| 806 | beego.AppConfig.String("mysqlpass") | ||
| 807 | beego.AppConfig.String("mysqlurls") | ||
| 808 | beego.AppConfig.String("mysqldb") | ||
| 809 | |||
| 810 | AppConfig支持如下方法 | ||
| 811 | |||
| 812 | - Bool(key string) (bool, error) | ||
| 813 | - Int(key string) (int, error) | ||
| 814 | - Int64(key string) (int64, error) | ||
| 815 | - Float(key string) (float64, error) | ||
| 816 | - String(key string) string | ||
| 817 | |||
| 818 | ## beego参数 | ||
| 819 | beego中带有很多可配置的参数,我们来一一认识一下它们,这样有利于我们在接下来的beego开发中可以充分的发挥他们的作用: | ||
| 820 | |||
| 821 | * BeeApp | ||
| 822 | |||
| 823 | beego默认启动的一个应用器入口,在应用import beego的时候,在init中已经初始化的。 | ||
| 824 | |||
| 825 | * AppConfig | ||
| 826 | |||
| 827 | beego的配置文件解析之后的对象,也是在init的时候初始化的,里面保存有解析`conf/app.conf`下面所有的参数数据 | ||
| 828 | |||
| 829 | * HttpAddr | ||
| 830 | |||
| 831 | 应用监听地址,默认为空,监听所有的网卡IP | ||
| 832 | |||
| 833 | * HttpPort | ||
| 834 | |||
| 835 | 应用监听端口,默认为8080 | ||
| 836 | |||
| 837 | * AppName | ||
| 838 | |||
| 839 | 应用名称,默认是beego | ||
| 840 | |||
| 841 | * RunMode | ||
| 842 | |||
| 843 | 应用的模式,默认是dev,为开发模式,在开发模式下出错会提示友好的出错页面,如前面错误描述中所述。 | ||
| 844 | |||
| 845 | * AutoRender | ||
| 846 | |||
| 847 | 是否模板自动渲染,默认值为true,对于API类型的应用,应用需要把该选项设置为false,不需要渲染模板。 | ||
| 848 | |||
| 849 | * RecoverPanic | ||
| 850 | |||
| 851 | 是否异常恢复,默认值为true,即当应用出现异常的情况,通过recover恢复回来,而不会导致应用异常退出。 | ||
| 852 | |||
| 853 | * PprofOn | ||
| 854 | |||
| 855 | 是否启用pprof,默认是false,当开启之后,用户可以通过如下地址查看相应的goroutine执行情况 | ||
| 856 | |||
| 857 | /debug/pprof | ||
| 858 | /debug/pprof/cmdline | ||
| 859 | /debug/pprof/profile | ||
| 860 | /debug/pprof/symbol | ||
| 861 | 关于pprof的信息,请参考官方的描述[pprof](http://golang.org/pkg/net/http/pprof/) | ||
| 862 | |||
| 863 | * ViewsPath | ||
| 864 | |||
| 865 | 模板路径,默认值是views | ||
| 866 | |||
| 867 | * SessionOn | ||
| 868 | |||
| 869 | session是否开启,默认是false | ||
| 870 | |||
| 871 | * SessionProvider | ||
| 872 | |||
| 873 | session的引擎,默认是memory | ||
| 874 | |||
| 875 | * SessionName | ||
| 876 | |||
| 877 | 存在客户端的cookie名称,默认值是beegosessionID | ||
| 878 | |||
| 879 | * SessionGCMaxLifetime | ||
| 880 | |||
| 881 | session过期时间,默认值是3600秒 | ||
| 882 | |||
| 883 | * SessionSavePath | ||
| 884 | |||
| 885 | session保存路径,默认是空 | ||
| 886 | |||
| 887 | * UseFcgi | ||
| 888 | |||
| 889 | 是否启用fastcgi,默认是false | ||
| 890 | |||
| 891 | * MaxMemory | ||
| 892 | |||
| 893 | 文件上传默认内存缓存大小,默认值是`1 << 26`(64M) | ||
| 894 | |||
| 684 | ## 第三方应用集成 | 895 | ## 第三方应用集成 |
| 685 | beego支持第三方应用的集成,用户可以自定义`http.Handler`,用户可以通过如下方式进行注册路由: | 896 | beego支持第三方应用的集成,用户可以自定义`http.Handler`,用户可以通过如下方式进行注册路由: |
| 686 | 897 | ... | ... |
-
Please register or sign in to post a comment