TurboGears – 闪存消息



TurboGears 提供了一个非常方便的消息系统,用于以一种不显眼的方式向用户通知信息。tg 模块中的 TGFlash 类提供对闪存消息的支持,这些消息存储在普通 Cookie 中。此类支持在服务器端以及通过 JavaScript 在客户端获取闪存消息。

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

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

<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 模板,可以在任何渲染的模板内使用它。此对象允许检索当前闪存消息并显示它。

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

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

如果调用的 flash 方法执行重定向,则闪存将显示在重定向页面中。如果该方法直接公开模板,则闪存将显示在模板本身中。

可以通过将 CSS 样式应用于状态代码来自定义闪存消息的外观。“quickstarted”项目包含错误、警告、信息和确定状态代码,这些代码由样式表 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')}" />

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

序号 参数和说明
1

flash.cookie_name

用于存储闪存消息的 Cookie 名称。默认为 webflash

2

flash.default_status

如果未指定,则为默认消息状态(默认为确定)

3

flash.template

渲染时用作闪存模板

4

flash.allow_html

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

5

flash.js_call

从 JavaScript 显示闪存时将运行的 JavaScript 代码。默认为 webflash.render()

6

flash.js_template

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

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

  • render(container_id, use_js=True) − 在模板内渲染闪存消息或为它们提供 Javascript 支持。

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

  • status − 只获取当前闪存状态,获取闪存状态将删除 Cookie。

  • message − 只获取当前闪存消息,获取闪存消息将删除 Cookie。

如何制作简单的闪存消息?

在下面的示例中,在根控制器类中提供了一个 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>

启动服务器并在浏览器中输入 https://127.0.0.1:8080/flash?user=MVL

Flash Message

将 URL 更改为 https://127.0.0.1:8080/flash 并查看根据 style.css 中的定义以不同格式显示的闪存消息

Message
广告