TurboGears – 闪讯


TurboGears 提供了一个非常方便的消息系统,以非侵入性的方式向用户通知信息。tg 模块中的 TGFlash 类提供对存储在普通 cookie 中的闪烁消息的支持。该类支持通过 JavaScript 在服务器端和客户端获取 Flash 消息。

当从 Python 本身使用时,可以从模板调用 TGFlash 类的 render() 方法来呈现 Flash消息如果在 JavaScript 上使用,它会提供一个 WebFlash 对象。它公开了payload()render()方法来获取当前的flash消息并从JavaScript中渲染它。

使用“快速启动”创建 TurboGears 项目时,它有一个 Master.html 模板。它包含该 flash 对象的变量的定义。从控制器接收到的此闪存消息的内容替换此模板中标记的占位符。

<py:with vars = "flash = tg.flash_obj.render('flash', use_js = False)">
   <div py:if = "flash" py:replace = "Markup(flash)" />
</py:with>

tg.flash_obj是 WebFlash 对象,通过包含master.html模板,它可以在任何呈现的模板中使用。该对象允许检索当前的闪存消息并显示它。

Flash 消息通过使用tg.flash()方法存储在 cookie 中(默认名称为 webflash)。然后将消息和状态参数传递给它。

tg.flash('Message', 'status')

如果调用 flash 的方法执行重定向,则 flash 将在重定向页面内可见。如果该方法直接公开模板,则 Flash 在模板本身内部将可见。

可以通过将 CSS 样式应用于状态代码来自定义 Flash 消息的外观。“快速启动”项目包含由样式表 public/css/style.css 定制的错误、警告、信息和正常状态代码。还可以添加更多带有样式的状态代码。

#flash > .warning {
   color: #c09853;
   background-color: #fcf8e3;
   border-color: #fbeed5;
}

#flash > .ok {
   color: #468847;
   background-color: #dff0d8;
   border-color: #d6e9c6;
}

#flash > .error {
   color: #b94a48;
   background-color: #f2dede;
   border-color: #eed3d7;
}

#flash > .info {
   color: #3a87ad;
   background-color: #d9edf7;
   border-color: #bce8f1;
}

该外部样式表需要包含在模板中 -

<link rel = "stylesheet" type = "text/css" media = "screen" 
   href = "${tg.url('/css/style.css')}" />

任何 Flash 消息支持的配置都可以通过设置 TGFlash 对象的 configure() 方法或 app_cfg.py(在 config 文件夹中)中的参数来实现。可配置的参数是 -

先生。 参数及说明
1

flash.cookie_name

用于存储 flash 消息的 cookie 的名称。默认是webflash

2

flash.default_status

如果未指定则默认消息状态(默认情况下可以)

3

flash.模板

渲染时用作Flash 模板

4

flash.allow_html

打开/关闭 Flash 消息中的转义,默认情况下不允许 HTML。

5

flash.js_call

从 JavaScript 显示 Flash 时将运行的 JavaScript 代码。默认是webflash.render()

6

flash.js_模板

string.Template实例用于替换对 Flash 消息的完整 JavaScript 支持。

  • pop_payload() - 函数获取当前闪存消息、状态和相关信息。获取闪现消息将删除 cookie。

  • render(container_id, use_js=True) - 在模板内渲染 Flash 消息或为其提供 Javascript 支持。

  • container_id是显示消息的 DIV,而 use_js 在将 Flash 渲染为 HTML 或供 JavaScript 使用之间切换。

  • status - 仅获取当前闪存状态,获取闪存状态将删除 cookie。

  • message - 仅获取当前的flash 消息,获取flash 消息将删除cookie。

如何制作简单的Flash消息?

在以下示例中,根控制器类中提供了 flash() 方法。它调用 flash() 消息,该消息被渲染到公开的模板 flash.html

from hello.lib.base import BaseController
from tg import expose, flash, redirect, request

class RootController(BaseController):
   @expose('hello.templates.flash')
   def flash(self, user = None):
      
      if user:
         flash(message = "Welcome "+user,status = "ok")
      else:
         flash(message = "Welcome Guest",status = "info")
      return {}

templates文件夹下制作flash.html的代码如下

<html xmlns = "http://www.w3.org/1999/xhtml"
   xmlns:py = "http://genshi.edgewall.org/"
   xmlns:xi = "http://www.w3.org/2001/XInclude">

   <head>
      <title>TurboGears 2.3: Flash messages>/title>
      <link rel = "stylesheet" type = "text/css" media = "screen"
         href = "${tg.url('/css/style.css')}" />
			
      <py:with vars = "flash = tg.flash_obj.render('flash', use_js = False)">
         <div py:if = "flash" py:replace = "Markup(flash)" />
      </py:with>
		
   </head>

   <body>
      <h2>Hello TurboGears</h2>
   </body>
	
</html>

启动服务器,在浏览器中输入http://localhost:8080/flash?user=MVL

闪讯

将 URL 更改为http://localhost:8080/flash并根据 style.css 中的定义查看不同格式的 Flash 消息

信息