764798d6 by astaxie

add to function & write docs

1 parent e96aa1aa
...@@ -221,6 +221,16 @@ func RouterHandler(path string, c http.Handler) *App { ...@@ -221,6 +221,16 @@ func RouterHandler(path string, c http.Handler) *App {
221 return BeeApp 221 return BeeApp
222 } 222 }
223 223
224 func SetViewsPath(path string) *App {
225 BeeApp.SetViewsPath(path)
226 return BeeApp
227 }
228
229 func SetStaticPath(url string, path string) *App {
230 StaticDir[url] = path
231 return BeeApp
232 }
233
224 func Filter(filter http.HandlerFunc) *App { 234 func Filter(filter http.HandlerFunc) *App {
225 BeeApp.Filter(filter) 235 BeeApp.Filter(filter)
226 return BeeApp 236 return BeeApp
......
...@@ -8,16 +8,17 @@ ...@@ -8,16 +8,17 @@
8 - [开发模式](#-3) 8 - [开发模式](#-3)
9 - [路由设置](#-4) 9 - [路由设置](#-4)
10 - [静态文件](#-5) 10 - [静态文件](#-5)
11 - [模板处理](#-6) 11 - [过滤和中间件](#-6)
12 - [request处理](#-7) 12 - [模板处理](#-7)
13 - [跳转和错误](#-8) 13 - [request处理](#-8)
14 - [response处理](#-9) 14 - [跳转和错误](#-9)
15 - [Sessions](#-10) 15 - [response处理](#-10)
16 - [Cache设置](#-11) 16 - [Sessions](#-11)
17 - [安全的Map](#-12) 17 - [Cache设置](#-12)
18 - [日志处理](#-13) 18 - [安全的Map](#-13)
19 - [第三方应用集成](#-14) 19 - [日志处理](#-14)
20 - [部署编译应用](#-15) 20 - [第三方应用集成](#-15)
21 - [部署编译应用](#-16)
21 22
22 ## 最小应用 23 ## 最小应用
23 一个最小最简单的应用如下代码所示: 24 一个最小最简单的应用如下代码所示:
...@@ -88,9 +89,120 @@ ...@@ -88,9 +89,120 @@
88 89
89 ## 开发模式 90 ## 开发模式
90 91
92 通过bee创建的项目,beego默认情况下是开发模式。
93
94 我们可以通过如下的方式改变我们的模式:
95
96 beego.RunMode = "pro"
97
98 或者我们在conf/app.conf下面设置如下:
99
100 runmode = pro
101
102 以上两种效果一样。
103
104 开发模式中
105
106 - 开发模式下,如果你的目录不存在views目录,那么会出现类似下面的错误提示:
107
108 2013/04/13 19:36:17 [W] [stat views: no such file or directory]
109
110 - 模板会自动重新加载不缓存。
111 - 如果服务端出错,那么就会在浏览器端显示如下类似的截图:
112
113 ![](images/dev.png)
114
91 ## 路由设置 115 ## 路由设置
92 116
117 路由的主要功能是实现从请求地址到实现方法,beego中封装了`Controller`,所以路由是从路径到`ControllerInterface`的过程,`ControllerInterface`的方法有如下:
118
119 type ControllerInterface interface {
120 Init(ct *Context, cn string)
121 Prepare()
122 Get()
123 Post()
124 Delete()
125 Put()
126 Head()
127 Patch()
128 Options()
129 Finish()
130 Render() error
131 }
132
133 这些方法`beego.Controller`都已经实现了,所以只要用户定义struct的时候匿名包含就可以了。当然更灵活的方法就是用户可以去自定义类似的方法,然后实现自己的逻辑。
134
135 用户可以通过如下的方式进行路由设置:
136
137 beego.Router("/", &controllers.MainController{})
138 beego.Router("/admin", &admin.UserController{})
139 beego.Router("/admin/index", &admin.ArticleController{})
140 beego.Router("/admin/addpkg", &admin.AddController{})
141
142 为了用户更加方便的路由设置,beego参考了sinatra的路由实现,支持多种方式的路由:
143
144 - beego.Router("/api/:id([0-9]+)", &controllers.RController{})
145 自定义正则匹配 //匹配 /api/123 :id= 123
146
147 - beego.Router("/news/:all", &controllers.RController{})
148 全匹配方式 //匹配 /news/path/to/123.html :all= path/to/123.html
149
150 - beego.Router("/user/:username([\w]+)", &controllers.RController{})
151 正则字符串匹配 //匹配 /user/astaxie :username = astaxie
152
153 - beego.Router("/download/*.*", &controllers.RController{})
154 *匹配方式 //匹配 /download/file/api.xml :path= file/api :ext=xml
155
156 - beego.Router("/download/ceshi/*", &controllers.RController{})
157 *全匹配方式 //匹配 /download/ceshi/file/api.json :splat=file/api.json
158
159 - beego.Router("/:id:int", &controllers.RController{})
160 int类型设置方式 //匹配 :id为int类型,框架帮你实现了正则([0-9]+)
161
162 - beego.Router("/:hi:string", &controllers.RController{})
163 string类型设置方式 //匹配 :hi为string类型。框架帮你实现了正则([\w]+)
164
93 ## 静态文件 165 ## 静态文件
166 Go语言内部其实已经提供了`http.ServeFile`,通过这个函数可以实现静态文件的服务。beego针对这个功能进行了一层封装,通过下面的方式进行静态文件注册:
167
168 beego.SetStaticPath("/static","public")
169
170 - 第一个参数是路径,url路径信息
171 - 第二个参数是静态文件目录(相对应用所在的目录)
172
173 beego支持多个目录的静态文件注册,用户可以注册如下的静态文件目录:
174
175 beego.SetStaticPath("/images","images")
176 beego.SetStaticPath("/css","css")
177 beego.SetStaticPath("/js","js")
178
179 设置了如上的静态目录之后,用户访问`/images/login/login.png`,那么就会访问应用对应的目录下面的`images/login/login.png`文件。如果是访问`/static/img/logo.png`,那么就访问`public/img/logo.png`文件。
180
181 ## 过滤和中间件
182 beego支持自定义过滤中间件,例如安全验证,强制跳转等
183
184 如下例子所示,验证用户名是否是admin,应用于全部的请求:
185
186 var FilterUser = func(w http.ResponseWriter, r *http.Request) {
187 if r.URL.User == nil || r.URL.User.Username() != "admin" {
188 http.Error(w, "", http.StatusUnauthorized)
189 }
190 }
191
192 beego.Filter(FilterUser)
193
194 还可以通过参数进行过滤,如果匹配参数就执行
195
196 beego.Router("/:id([0-9]+)", &admin.EditController{})
197 beego.FilterParam("id", func(rw http.ResponseWriter, r *http.Request) {
198 dosomething()
199 })
200
201 当然你还可以通过前缀过滤
202
203 beego.FilterPrefixPath("/admin", func(rw http.ResponseWriter, r *http.Request) {
204 dosomething()
205 })
94 206
95 ## 模板处理 207 ## 模板处理
96 208
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!