Merge pull request #145 from chenwenli/master

reviewed 14 charpt five files
This commit is contained in:
astaxie
2013-01-17 06:59:40 -08:00
6 changed files with 30 additions and 30 deletions

View File

@@ -1,6 +1,6 @@
# 1 GO环境配置
欢迎来到Go的世界让我们开始吧
欢迎来到Go的世界让我们开始探索吧!
Go是一种新的语言一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点

View File

@@ -21,7 +21,7 @@ GDB的一些常用命令如下所示
- list
简写命令`l`,用来显示源代码,默认显示十行代码,后面可以带上参数显示的具体行,例如:`list 15`显示十行代码其中15行在显示的十行里面的中间如下所示。
简写命令`l`,用来显示源代码,默认显示十行代码,后面可以带上参数显示的具体行,例如:`list 15`,显示十行代码,其中15行在显示的十行里面的中间如下所示。
10 time.Sleep(2 * time.Second)
11 c <- i

10
14.1.md
View File

@@ -1,5 +1,5 @@
# 14.1 静态文件支持
我们在前面已经讲过如何处理静态文件这小节我们详细的介绍如何在beego里面设置和使用静态文件。通过再介绍一个twitter开源的html、css框架bootstrap无需任何的设计人员就能够让你快速建立一个漂亮的站点。
我们在前面已经讲过如何处理静态文件这小节我们详细的介绍如何在beego里面设置和使用静态文件。通过再介绍一个twitter开源的html、css框架bootstrap无需大量的设计工作就能够让你快速建立一个漂亮的站点。
## beego静态文件实现和设置
Go的net/http包中提供了静态文件的服务`ServeFile``FileServer`等函数。beego的静态文件处理就是基于这一层处理的具体的实现如下所示
@@ -14,16 +14,16 @@ Go的net/http包中提供了静态文件的服务`ServeFile`和`FileServer`
}
}
StaticDir里面保存的是相应的url对应到静态文件所在的目录因此在处理URL请求的时候只需要判断对应的请求地址是否包含静态处理开头的url如果是那么就采用http.ServeFile提供服务。
StaticDir里面保存的是相应的url对应到静态文件所在的目录因此在处理URL请求的时候只需要判断对应的请求地址是否包含静态处理开头的url如果包含的话就采用http.ServeFile提供服务。
举例如下:
beego.StaticDir["/asset"] = "/static"
那么请求url如`http://www.beego.me/asset/bootstrap.css`的请求就会请求`/static/bootstrap.css`来提供反馈给客户端。
那么请求url如`http://www.beego.me/asset/bootstrap.css`就会请求`/static/bootstrap.css`来提供反馈给客户端。
## bootstrap集成
Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。Bootstrap是快速开发Web应用程序的前端工具包。它是一个CSS和HTML的集合它使用了最新的浏览器技术给你的Web开发提供了时尚的版式表单buttons,表格,网格系统等等。
Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。对于开发者来说,Bootstrap是快速开发Web应用程序的最佳前端工具包。它是一个CSS和HTML的集合它使用了最新的HTML5标准给你的Web开发提供了时尚的版式表单按钮,表格,网格系统等等。
- 组件
  Bootstrap中包含了丰富的Web组件根据这些组件可以快速的搭建一个漂亮、功能完备的网站。其中包括以下组件
@@ -67,7 +67,7 @@ Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。Boot
图14.3 构建的基于bootstrap的站点界面
这些模板和格式bootstrap官方都有提供这边就不重复贴代码大家可以上bootstrap官方网站学习如何编写这样的模板。
这些模板和格式bootstrap官方都有提供这边就不重复贴代码大家可以上bootstrap官方网站学习如何编写模板。
## links

20
14.2.md
View File

@@ -1,8 +1,8 @@
# 14.2 Session支持
第六章的时候我们介绍过如何在Go语言中使用session也实现了一个sessionMangerbeego基于sessionManager实现了框架方便的处理session功能。
第六章的时候我们介绍过如何在Go语言中使用session也实现了一个sessionMangerbeego框架基于sessionManager实现了方便的session处理功能。
## session集成
beego中主要有如下这些全局变量来控制session处理
beego中主要有以下的全局变量来控制session处理
//related to session
SessionOn bool // 是否开启session模块默认不开启
@@ -12,7 +12,7 @@ beego中主要有如下这些全局变量来控制session处理
GlobalSessions *session.Manager //全局session控制器
当然上面这些变量需要初始化值以及如何配合配置文件设置来设置这些值:
当然上面这些变量需要初始化值,也可以按照下面的代码来配合配置文件设置这些值:
if ar, err := AppConfig.Bool("sessionon"); err != nil {
SessionOn = false
@@ -43,9 +43,9 @@ beego中主要有如下这些全局变量来控制session处理
go GlobalSessions.GC()
}
这样如果只要SessionOn设置为true那么就会默认开启session功能独立开一个goroutine来处理session。
这样只要SessionOn设置为true那么就会默认开启session功能独立开一个goroutine来处理session。
为了方便我们在我们的Controller中方便的使用session我们`beego.Controller`中提供了如下方法:
为了方便我们在自定义Controller中快速使用session作者`beego.Controller`中提供了如下方法:
func (c *Controller) StartSession() (sess session.Session) {
sess = GlobalSessions.SessionStart(c.Ctx.ResponseWriter, c.Ctx.Request)
@@ -53,14 +53,14 @@ beego中主要有如下这些全局变量来控制session处理
}
## session使用
通过上面的代码我们可以看到beego框架很方便的就继承了session功能那么我们在项目中如何使用呢?
通过上面的代码我们可以看到beego框架简单地继承了session功能那么在项目中如何使用呢
首先我们需要在我们的main入口开启session
首先我们需要在应用的main入口开启session
beego.SessionOn = true
然后我们就可以在我们的控制器的相应方法中如下所示的使用session了
然后我们就可以在控制器的相应方法中如下所示的使用session了
func (this *MainController) Get() {
var intcount int
@@ -79,7 +79,7 @@ beego中主要有如下这些全局变量来控制session处理
this.TplNames = "index.tpl"
}
上面的代码展示了如何在我们自己的控制逻辑中使用session主要分两个步骤
上面的代码展示了如何在控制逻辑中使用session主要分两个步骤
1. 获取session对象
@@ -94,7 +94,7 @@ beego中主要有如下这些全局变量来控制session处理
//设置session值
sess.Set("count", intcount)
通过上面的例子我们看到在基于beego框架开发的应用中使用session相当方便基本上和PHP中使用类似。
从上面代码可以看出基于beego框架开发的应用中使用session相当方便基本上和PHP中调用`session_start()`类似。
## links

18
14.3.md
View File

@@ -1,23 +1,23 @@
# 14.3 表单及验证支持
Web开发中我们经常的开发流程如下所示
Web开发中对于这样的一个流程可能很眼熟
- 打开一个网页显示出表单。
- 用户填写并提交了表单。
- 如果提交了一些无效的信息,或者可能漏掉了一个必填项,表单将会连同的数据和错误问题的描述信息重新显示
- 这个过程将继续,直到提交了一个有效的表单。
- 如果用户提交了一些无效的信息,或者可能漏掉了一个必填项,表单将会连同用户的数据和错误问题的描述信息返回
- 用户再次填写,继续上一步过程,直到提交了一个有效的表单。
在接收端,脚本必须:
- 检查用户递交的表单数据。
- 验证数据是否为正确的类型,合适的标准。例如,如果一个用户名被提交,它必须被验证是否只包含了允许的字符。它必须有一个最小长度,不能超过最大长度。用户名不能已存在的他人用户名,或者甚至是一个保留字等。
- 过滤清理数据使逻辑处理中接收的数据是安全的。
- 验证数据是否为正确的类型,合适的标准。例如,如果一个用户名被提交,它必须被验证是否只包含了允许的字符。它必须有一个最小长度,不能超过最大长度。用户名不能已存在的他人用户名重复,甚至是一个保留字等。
- 过滤数据并清理不安全字符,保证逻辑处理中接收的数据是安全的。
- 如果需要预格式化数据数据需要清除空白或者经过HTML编码等等。
- 准备数据,插入数据库。
- 准备数据,插入数据库。
尽管上面的过程并不是很复杂,但是通常需要编写很多代码,而且为了显示错误信息,在网页中经常要使用多种不同的控制结构。创建表单验证虽简单,实施起来却也枯燥无味。
尽管上面的过程并不是很复杂,但是通常情况下需要编写很多代码,而且为了显示错误信息,在网页中经常要使用多种不同的控制结构。创建表单验证虽简单,实施起来实在枯燥无味。
## 表单和验证
上面我们看到一般开发过程都是相当复杂,而且是在重复一样的工作,而且如果需要增加一个表单数据,那么整个流程都需要修改我们知道Go里面struct是我们常用的一个数据结构,所以beego的form采用了struct来处理表单信息。
对于开发者来说,一般开发过程都是相当复杂,而且大多是在重复一样的工作。假设一个场景项目中忽然需要增加一个表单数据,那么局部代码的整个流程都需要修改我们知道Go里面struct是常用的一个数据结构因此beego的form采用了struct来处理表单信息。
首先定义一个开发Web应用时相对应的struct一个字段对应一个form元素通过struct的tag来定义相应的元素信息和验证信息如下所示
@@ -29,7 +29,7 @@ Web开发中我们经常的开发流程如下所示
Introduce string `form:textarea`
}
定义好struct之后我们就可以在controller中这样操作
定义好struct之后接下来在controller中这样操作
func (this *AddController) Get() {
this.Data["form"] = beego.Form(&User{})

View File

@@ -1,5 +1,5 @@
# 14.4 用户认证
我们在开发Web应用过程中,用户认证是我们经常遇到的问题,用户登录、注册、登出等操作,而一般认证也分为三个方面的认证
在开发Web应用过程中用户认证是开发者经常遇到的问题,用户登录、注册、登出等操作,而一般认证也分为三个方面的认证
- HTTP Basic和 HTTP Digest认证
- 第三方集成认证QQ、微博、豆瓣、OPENID、google、github、facebook和twitter等
@@ -8,7 +8,7 @@
beego目前没有针对这三种方式进行任何形式的集成但是可以充分的利用第三方开源库来实现上面的三种方式的用户认证不过后续beego会对前面两种认证逐步集成。
## HTTP Basic和 HTTP Digest认证
这两个认证是我们一些应用比较简单的认证,目前已经有开源的第三方库支持这两个认证:
这两个认证是一些应用采用的比较简单的认证,目前已经有开源的第三方库支持这两个认证:
github.com/abbot/go-http-auth
@@ -46,10 +46,10 @@ beego目前没有针对这三种方式进行任何形式的集成但是可以
this.TplNames = "index.tpl"
}
上面代码利用了beego的prepare函数在执行之前调用了认证函数我们可以看到非常容易的就实现了http authdigest的认证也是同样的原理。
上面代码利用了beego的prepare函数在执行正常逻辑之前调用了认证函数,这样就非常简单的实现了http authdigest的认证也是同样的原理。
## oauth和oauth2的认证
oauth和oauth2是目前比较流行的两种认证方式还好第三方有一个库实现了这个认证但是是国外实现的没有QQ、微博之类的国内应用认证集成
oauth和oauth2是目前比较流行的两种认证方式还好第三方有一个库实现了这个认证但是是国外实现的没有QQ、微博之类的国内应用认证集成
github.com/bradrydzewski/go.auth