dbfd844f by astaxie

beego support flash data

1 parent 452478e7
...@@ -58,7 +58,6 @@ func (c *Controller) Init(ctx *Context, cn string) { ...@@ -58,7 +58,6 @@ func (c *Controller) Init(ctx *Context, cn string) {
58 c.ChildName = cn 58 c.ChildName = cn
59 c.Ctx = ctx 59 c.Ctx = ctx
60 c.TplExt = "tpl" 60 c.TplExt = "tpl"
61
62 } 61 }
63 62
64 func (c *Controller) Prepare() { 63 func (c *Controller) Prepare() {
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
15 - [request处理](#request%E5%A4%84%E7%90%86) 15 - [request处理](#request%E5%A4%84%E7%90%86)
16 - [跳转和错误](#%E8%B7%B3%E8%BD%AC%E5%92%8C%E9%94%99%E8%AF%AF) 16 - [跳转和错误](#%E8%B7%B3%E8%BD%AC%E5%92%8C%E9%94%99%E8%AF%AF)
17 - [response处理](#response%E5%A4%84%E7%90%86) 17 - [response处理](#response%E5%A4%84%E7%90%86)
18 - [Sessions](#sessions) 18 - [Sessions/Flash](#sessions/flash)
19 - [Cache设置](#cache%E8%AE%BE%E7%BD%AE) 19 - [Cache设置](#cache%E8%AE%BE%E7%BD%AE)
20 - [安全的Map](#%E5%AE%89%E5%85%A8%E7%9A%84map) 20 - [安全的Map](#%E5%AE%89%E5%85%A8%E7%9A%84map)
21 - [日志处理](#%E6%97%A5%E5%BF%97%E5%A4%84%E7%90%86) 21 - [日志处理](#%E6%97%A5%E5%BF%97%E5%A4%84%E7%90%86)
...@@ -660,7 +660,7 @@ response可能会有几种情况: ...@@ -660,7 +660,7 @@ response可能会有几种情况:
660 this.Ctx.WriteString("ok") 660 this.Ctx.WriteString("ok")
661 661
662 662
663 ## Sessions 663 ## Sessions/Flash
664 664
665 beego内置了session模块,目前session模块支持的后端引擎包括memory、file、mysql、redis四中,用户也可以根据相应的interface实现自己的引擎。 665 beego内置了session模块,目前session模块支持的后端引擎包括memory、file、mysql、redis四中,用户也可以根据相应的interface实现自己的引擎。
666 666
...@@ -746,7 +746,64 @@ sess对象具有如下方法: ...@@ -746,7 +746,64 @@ sess对象具有如下方法:
746 beego.SessionProvider = "redis" 746 beego.SessionProvider = "redis"
747 beego.SessionSavePath = "127.0.0.1:6379" 747 beego.SessionSavePath = "127.0.0.1:6379"
748 748
749 这个flash与Adobe/Macromedia Flash没有任何关系。它主要用于在两个逻辑间传递临时数据,flash中存放的所有数据会在紧接着的下一个逻辑中调用后清除。一般用于传递提示和错误消息。它适合[Post/Redirect/Get](http://en.wikipedia.org/wiki/Post/Redirect/Get)模式。下面看使用的例子
750
751 // 显示设置信息
752 func (c *MainController) Get() {
753 flash:=beego.ReadFromRequest(c)
754 if n,ok:=flash.Data["notice"];ok{
755 //显示设置成功
756 c.TplNames = "set_success.html"
757 }else if n,ok=flash.Data["error"];ok{
758 //显示错误
759 c.TplNames = "set_error.html"
760 }else{
761 // 不然默认显示设置页面
762 this.Data["list"]=GetInfo()
763 c.TplNames = "setting_list.html"
764 }
765 }
766
767 // 处理设置信息
768 func (c *MainController) Post() {
769 flash:=beego.NewFlash()
770 setting:=Settings{}
771 valid := Validation{}
772 c.ParseForm(&setting)
773 if b, err := valid.Valid(setting);err!=nil {
774 flash.Error("Settings invalid!")
775 flash.Store(c)
776 c.Redirect("/setting",302)
777 return
778 }else if b!=nil{
779 flash.Error("validation err!")
780 flash.Store(c)
781 c.Redirect("/setting",302)
782 return
783 }
784 saveSetting(setting)
785 flash.Notice("Settings saved!")
786 flash.Store(c)
787 c.Redirect("/setting",302)
788 }
789
790 上面的代码执行的大概逻辑是这样的:
791
792 1. Get方法执行,因为没有flash数据,所以显示设置页面
793 2. 用户设置信息之后点击递交,执行Post,然后初始化一个flash,通过验证,验证出错或者验证不通过设置flash的错误,如果通过了就保存设置,然后设置flash成功设置的信息。
794 3. 设置完成后跳转到Get请求
795 4. Get请求获取到了Flash信息,然后执行相应的逻辑,如果出错显示出错的页面,如果成功显示成功的页面。
796
797 默认情况下`ReadFromRequest`函数已经实现了读取的数据赋值给flash,所以在你的模板里面你可以这样读取数据
798
799 {{.flash.error}}
800 {{.flash.warning}}
801 {{.flash.notice}}
749 802
803 flash对象有三个级别的设置:
804 * Notice提示信息
805 * Warning警告信息
806 * Error错误信息
750 ## Cache设置 807 ## Cache设置
751 808
752 beego内置了一个cache模块,实现了类似memcache的功能,缓存数据在内存中,主要的使用方法如下: 809 beego内置了一个cache模块,实现了类似memcache的功能,缓存数据在内存中,主要的使用方法如下:
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!