Merge pull request #145 from chenwenli/master
reviewed 14 charpt five files
This commit is contained in:
2
01.0.md
2
01.0.md
@@ -1,6 +1,6 @@
|
|||||||
# 1 GO环境配置
|
# 1 GO环境配置
|
||||||
|
|
||||||
欢迎来到Go的世界,让我们开始吧!
|
欢迎来到Go的世界,让我们开始探索吧!
|
||||||
|
|
||||||
Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:
|
Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:
|
||||||
|
|
||||||
|
|||||||
2
11.2.md
2
11.2.md
@@ -21,7 +21,7 @@ GDB的一些常用命令如下所示
|
|||||||
|
|
||||||
- list
|
- list
|
||||||
|
|
||||||
简写命令`l`,用来显示源代码,默认显示十行代码,后面可以带上参数显示的具体行,例如:`list 15`,显示十行代码,其中15行在显示的十行里面的中间,如下所示。
|
简写命令`l`,用来显示源代码,默认显示十行代码,后面可以带上参数显示的具体行,例如:`list 15`,显示十行代码,其中第15行在显示的十行里面的中间,如下所示。
|
||||||
|
|
||||||
10 time.Sleep(2 * time.Second)
|
10 time.Sleep(2 * time.Second)
|
||||||
11 c <- i
|
11 c <- i
|
||||||
|
|||||||
10
14.1.md
10
14.1.md
@@ -1,5 +1,5 @@
|
|||||||
# 14.1 静态文件支持
|
# 14.1 静态文件支持
|
||||||
我们在前面已经讲过如何处理静态文件,这小节我们详细的介绍如何在beego里面设置和使用静态文件。通过再介绍一个twitter开源的html、css框架bootstrap,无需任何的设计人员就能够让你快速的建立一个漂亮的站点。
|
我们在前面已经讲过如何处理静态文件,这小节我们详细的介绍如何在beego里面设置和使用静态文件。通过再介绍一个twitter开源的html、css框架bootstrap,无需大量的设计工作就能够让你快速地建立一个漂亮的站点。
|
||||||
|
|
||||||
## beego静态文件实现和设置
|
## beego静态文件实现和设置
|
||||||
Go的net/http包中提供了静态文件的服务,`ServeFile`和`FileServer`等函数。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"
|
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集成
|
||||||
Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。Bootstrap是快速开发Web应用程序的前端工具包。它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等。
|
Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。对于开发者来说,Bootstrap是快速开发Web应用程序的最佳前端工具包。它是一个CSS和HTML的集合,它使用了最新的HTML5标准,给你的Web开发提供了时尚的版式,表单,按钮,表格,网格系统等等。
|
||||||
|
|
||||||
- 组件
|
- 组件
|
||||||
Bootstrap中包含了丰富的Web组件,根据这些组件,可以快速的搭建一个漂亮、功能完备的网站。其中包括以下组件:
|
Bootstrap中包含了丰富的Web组件,根据这些组件,可以快速的搭建一个漂亮、功能完备的网站。其中包括以下组件:
|
||||||
@@ -67,7 +67,7 @@ Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。Boot
|
|||||||
|
|
||||||
图14.3 构建的基于bootstrap的站点界面
|
图14.3 构建的基于bootstrap的站点界面
|
||||||
|
|
||||||
这些模板和格式bootstrap官方都有提供,这边就不在重复贴代码,大家可以上bootstrap官方网站学习如何编写这样的模板。
|
这些模板和格式bootstrap官方都有提供,这边就不再重复贴代码,大家可以上bootstrap官方网站学习如何编写模板。
|
||||||
|
|
||||||
|
|
||||||
## links
|
## links
|
||||||
|
|||||||
20
14.2.md
20
14.2.md
@@ -1,8 +1,8 @@
|
|||||||
# 14.2 Session支持
|
# 14.2 Session支持
|
||||||
第六章的时候我们介绍过如何在Go语言中使用session,也实现了一个sessionManger,beego基于sessionManager实现了框架方便的处理session功能。
|
第六章的时候我们介绍过如何在Go语言中使用session,也实现了一个sessionManger,beego框架基于sessionManager实现了方便的session处理功能。
|
||||||
|
|
||||||
## session集成
|
## session集成
|
||||||
beego中主要有如下这些全局变量来控制session处理:
|
beego中主要有以下的全局变量来控制session处理:
|
||||||
|
|
||||||
//related to session
|
//related to session
|
||||||
SessionOn bool // 是否开启session模块,默认不开启
|
SessionOn bool // 是否开启session模块,默认不开启
|
||||||
@@ -12,7 +12,7 @@ beego中主要有如下这些全局变量来控制session处理:
|
|||||||
|
|
||||||
GlobalSessions *session.Manager //全局session控制器
|
GlobalSessions *session.Manager //全局session控制器
|
||||||
|
|
||||||
当然上面这些变量需要初始化值以及如何配合配置文件设置来设置这些值:
|
当然上面这些变量需要初始化值,也可以按照下面的代码来配合配置文件以设置这些值:
|
||||||
|
|
||||||
if ar, err := AppConfig.Bool("sessionon"); err != nil {
|
if ar, err := AppConfig.Bool("sessionon"); err != nil {
|
||||||
SessionOn = false
|
SessionOn = false
|
||||||
@@ -43,9 +43,9 @@ beego中主要有如下这些全局变量来控制session处理:
|
|||||||
go GlobalSessions.GC()
|
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) {
|
func (c *Controller) StartSession() (sess session.Session) {
|
||||||
sess = GlobalSessions.SessionStart(c.Ctx.ResponseWriter, c.Ctx.Request)
|
sess = GlobalSessions.SessionStart(c.Ctx.ResponseWriter, c.Ctx.Request)
|
||||||
@@ -53,14 +53,14 @@ beego中主要有如下这些全局变量来控制session处理:
|
|||||||
}
|
}
|
||||||
|
|
||||||
## session使用
|
## session使用
|
||||||
通过上面的代码我们可以看到,beego框架很方便的就继承了session功能,那么我们在项目中如何使用呢?
|
通过上面的代码我们可以看到,beego框架简单地继承了session功能,那么在项目中如何使用呢?
|
||||||
|
|
||||||
首先我们需要在我们的main入口中开启session
|
首先我们需要在应用的main入口处开启session:
|
||||||
|
|
||||||
beego.SessionOn = true
|
beego.SessionOn = true
|
||||||
|
|
||||||
|
|
||||||
然后我们就可以在我们的控制器的相应方法中如下所示的使用session了:
|
然后我们就可以在控制器的相应方法中如下所示的使用session了:
|
||||||
|
|
||||||
func (this *MainController) Get() {
|
func (this *MainController) Get() {
|
||||||
var intcount int
|
var intcount int
|
||||||
@@ -79,7 +79,7 @@ beego中主要有如下这些全局变量来控制session处理:
|
|||||||
this.TplNames = "index.tpl"
|
this.TplNames = "index.tpl"
|
||||||
}
|
}
|
||||||
|
|
||||||
上面的代码展示了如何在我们自己的控制逻辑中使用session,主要分两个步骤:
|
上面的代码展示了如何在控制逻辑中使用session,主要分两个步骤:
|
||||||
|
|
||||||
1. 获取session对象
|
1. 获取session对象
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ beego中主要有如下这些全局变量来控制session处理:
|
|||||||
//设置session值
|
//设置session值
|
||||||
sess.Set("count", intcount)
|
sess.Set("count", intcount)
|
||||||
|
|
||||||
通过上面的例子我们看到在基于beego框架开发的应用中使用session相当方便,基本上和PHP中使用类似。
|
从上面代码可以看出基于beego框架开发的应用中使用session相当方便,基本上和PHP中调用`session_start()`类似。
|
||||||
|
|
||||||
|
|
||||||
## links
|
## links
|
||||||
|
|||||||
18
14.3.md
18
14.3.md
@@ -1,23 +1,23 @@
|
|||||||
# 14.3 表单及验证支持
|
# 14.3 表单及验证支持
|
||||||
Web开发中我们经常的开发流程如下所示:
|
在Web开发中对于这样的一个流程可能很眼熟:
|
||||||
|
|
||||||
- 打开一个网页显示出表单。
|
- 打开一个网页显示出表单。
|
||||||
- 用户填写并提交了表单。
|
- 用户填写并提交了表单。
|
||||||
- 如果你提交了一些无效的信息,或者可能漏掉了一个必填项,表单将会连同你的数据和错误问题的描述信息重新显示。
|
- 如果用户提交了一些无效的信息,或者可能漏掉了一个必填项,表单将会连同用户的数据和错误问题的描述信息返回。
|
||||||
- 这个过程将继续,直到你提交了一个有效的表单。
|
- 用户再次填写,继续上一步过程,直到提交了一个有效的表单。
|
||||||
|
|
||||||
在接收端,脚本必须:
|
在接收端,脚本必须:
|
||||||
|
|
||||||
- 检查用户递交的表单数据。
|
- 检查用户递交的表单数据。
|
||||||
- 验证数据是否为正确的类型,合适的标准。例如,如果一个用户名被提交,它必须被验证是否只包含了允许的字符。它必须有一个最小长度,不能超过最大长度。用户名不能是已存在的他人用户名,或者甚至是一个保留字等。
|
- 验证数据是否为正确的类型,合适的标准。例如,如果一个用户名被提交,它必须被验证是否只包含了允许的字符。它必须有一个最小长度,不能超过最大长度。用户名不能与已存在的他人用户名重复,甚至是一个保留字等。
|
||||||
- 过滤清理数据使逻辑处理中接收到的数据是安全的。
|
- 过滤数据并清理不安全字符,保证逻辑处理中接收的数据是安全的。
|
||||||
- 如果需要,预格式化数据(数据需要清除空白或者经过HTML编码等等。)
|
- 如果需要,预格式化数据(数据需要清除空白或者经过HTML编码等等。)
|
||||||
- 准备数据,插入数据库。
|
- 准备好数据,插入数据库。
|
||||||
|
|
||||||
尽管上面的过程并不是很复杂,但是通常需要编写很多代码,而且为了显示错误信息,在网页中经常要使用多种不同的控制结构。创建表单验证虽简单,实施起来却也枯燥无味。
|
尽管上面的过程并不是很复杂,但是通常情况下需要编写很多代码,而且为了显示错误信息,在网页中经常要使用多种不同的控制结构。创建表单验证虽简单,实施起来实在枯燥无味。
|
||||||
|
|
||||||
## 表单和验证
|
## 表单和验证
|
||||||
上面我们看到一般开发过程都是相当的复杂,而且都是在重复一样的工作,而且如果需要增加一个表单数据,那么整个流程都需要修改,我们知道在Go里面struct是我们常用的一个数据结构,所以beego的form采用了struct来处理表单信息。
|
对于开发者来说,一般开发过程都是相当复杂,而且大多是在重复一样的工作。假设一个场景项目中忽然需要增加一个表单数据,那么局部代码的整个流程都需要修改。我们知道Go里面struct是常用的一个数据结构,因此beego的form采用了struct来处理表单信息。
|
||||||
|
|
||||||
首先定义一个开发Web应用时相对应的struct,一个字段对应一个form元素,通过struct的tag来定义相应的元素信息和验证信息,如下所示:
|
首先定义一个开发Web应用时相对应的struct,一个字段对应一个form元素,通过struct的tag来定义相应的元素信息和验证信息,如下所示:
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ Web开发中我们经常的开发流程如下所示:
|
|||||||
Introduce string `form:textarea`
|
Introduce string `form:textarea`
|
||||||
}
|
}
|
||||||
|
|
||||||
定义好struct之后我们就可以在controller中这样操作
|
定义好struct之后接下来在controller中这样操作
|
||||||
|
|
||||||
func (this *AddController) Get() {
|
func (this *AddController) Get() {
|
||||||
this.Data["form"] = beego.Form(&User{})
|
this.Data["form"] = beego.Form(&User{})
|
||||||
|
|||||||
8
14.4.md
8
14.4.md
@@ -1,5 +1,5 @@
|
|||||||
# 14.4 用户认证
|
# 14.4 用户认证
|
||||||
我们在开发Web应用的过程中,用户认证是我们经常遇到的问题,用户登录、注册、登出等操作,而一般认证也分为三个方面的认证
|
在开发Web应用过程中,用户认证是开发者经常遇到的问题,用户登录、注册、登出等操作,而一般认证也分为三个方面的认证
|
||||||
|
|
||||||
- HTTP Basic和 HTTP Digest认证
|
- HTTP Basic和 HTTP Digest认证
|
||||||
- 第三方集成认证:QQ、微博、豆瓣、OPENID、google、github、facebook和twitter等
|
- 第三方集成认证:QQ、微博、豆瓣、OPENID、google、github、facebook和twitter等
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
beego目前没有针对这三种方式进行任何形式的集成,但是可以充分的利用第三方开源库来实现上面的三种方式的用户认证,不过后续beego会对前面两种认证逐步集成。
|
beego目前没有针对这三种方式进行任何形式的集成,但是可以充分的利用第三方开源库来实现上面的三种方式的用户认证,不过后续beego会对前面两种认证逐步集成。
|
||||||
|
|
||||||
## HTTP Basic和 HTTP Digest认证
|
## HTTP Basic和 HTTP Digest认证
|
||||||
这两个认证是我们一些应用比较简单的认证,目前已经有开源的第三方库支持这两个认证:
|
这两个认证是一些应用采用的比较简单的认证,目前已经有开源的第三方库支持这两个认证:
|
||||||
|
|
||||||
github.com/abbot/go-http-auth
|
github.com/abbot/go-http-auth
|
||||||
|
|
||||||
@@ -46,10 +46,10 @@ beego目前没有针对这三种方式进行任何形式的集成,但是可以
|
|||||||
this.TplNames = "index.tpl"
|
this.TplNames = "index.tpl"
|
||||||
}
|
}
|
||||||
|
|
||||||
上面代码利用了beego的prepare函数,在执行之前调用了认证函数,我们可以看到非常容易的就实现了http auth,digest的认证也是同样的原理。
|
上面代码利用了beego的prepare函数,在执行正常逻辑之前调用了认证函数,这样就非常简单的实现了http auth,digest的认证也是同样的原理。
|
||||||
|
|
||||||
## oauth和oauth2的认证
|
## oauth和oauth2的认证
|
||||||
oauth和oauth2是目前比较流行的两种认证方式,还好第三方有一个库实现了这个认证,但是是国外实现的,没有QQ、微博之类的国内应用认证集成:
|
oauth和oauth2是目前比较流行的两种认证方式,还好第三方有一个库实现了这个认证,但是是国外实现的,并没有QQ、微博之类的国内应用认证集成:
|
||||||
|
|
||||||
github.com/bradrydzewski/go.auth
|
github.com/bradrydzewski/go.auth
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user