TurboGears - Mensajes flash

TurboGears proporciona un sistema de mensajería muy conveniente para notificar información al usuario de una manera no molesta. La clase TGFlash en el módulo tg proporciona soporte para flashear mensajes que se almacenan en una cookie simple. Esta clase admite la obtención de mensajes flash en el lado del servidor y en el lado del cliente a través de JavaScript.

los render()El método de la clase TGFlash, cuando se usa desde el propio Python, se puede invocar desde la plantilla para representar un mensaje flash. Si se usa en JavaScript, proporciona un objeto WebFlash. Exponepayload() y render() métodos para recuperar el mensaje flash actual y representarlo desde JavaScript.

Cuando se crea un proyecto de TurboGears usando 'inicio rápido', tiene una plantilla Master.html. Contiene la definición de una variable de ese objeto flash. El contenido de este mensaje flash recibido del controlador sustituye al marcador de posición marcado en esta plantilla.

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

los tg.flash_obj es el objeto WebFlash, que está disponible dentro de cualquier plantilla renderizada al incluir master.htmlmodelo. Este objeto permite recuperar el mensaje flash actual y mostrarlo.

Los mensajes Flash se almacenan en una cookie (cuyo nombre por defecto es webflash) usando tg.flash()método. A continuación, se le pasan los parámetros de mensaje y estado.

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

Si el método que se llama flash realiza una redirección, entonces el flash será visible dentro de la página redirigida. Si el método expone directamente una plantilla, el flash será visible dentro de la propia plantilla.

La apariencia del mensaje flash se puede personalizar aplicando estilos CSS al código de estado. Un proyecto de 'inicio rápido' contiene códigos de error, advertencia, información y estado correcto personalizados por una hoja de estilo public / css / style.css. También se pueden agregar más códigos de estado con estilos.

#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;
}

Esta hoja de estilo externa debe incluirse en la plantilla:

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

La configuración de cualquier soporte de mensajes Flash se puede lograr estableciendo parámetros para el método configure () del objeto TGFlash o en app_cfg.py (en la carpeta de configuración). Los parámetros configurables son:

No Señor. Parámetros y descripción
1

flash.cookie_name

Nombre de la cookie utilizada para almacenar mensajes flash. El valor predeterminado eswebflash.

2

flash.default_status

Estado del mensaje predeterminado si no se especifica (ok de forma predeterminada)

3

flash.template

Usado como flash template cuando se renderiza.

4

flash.allow_html

Vueltas on/off escaping in flash messages, HTML predeterminado no está permitido.

5

flash.js_call

Código JavaScript que se ejecutará al mostrar el flash de JavaScript. El valor predeterminado eswebflash.render()

6

flash.js_template

string.Template instancia utilizada para reemplazar el soporte completo de JavaScript para mensajes flash.

  • pop_payload() - función fetches current flash message, statuse información relacionada. Recibir el mensaje flash eliminará la cookie.

  • render(container_id, use_js=True) - Renderice el mensaje flash dentro de la plantilla o proporcione soporte Javascript para ellos.

  • container_id es el DIV donde se mostrarán los mensajes, mientras que use_js cambia entre renderizar el flash como HTML o para el uso de JavaScript.

  • status - Obtener solo el estado actual del flash, obtener el estado del flash eliminará la cookie.

  • message - Obtener solo el mensaje flash actual, al recibir el mensaje flash se eliminará la cookie.

¿Cómo hacer un mensaje flash simple?

En el siguiente ejemplo, se proporciona un método flash () en la clase del controlador raíz. Llama a un mensaje flash () que se representa en la plantilla expuesta, 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 {}

El código para hacer flash.html en la carpeta de plantillas es la siguiente

<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>

Inicie el servidor e ingrese http://localhost:8080/flash?user=MVL en el navegador

Cambiar URL a http://localhost:8080/flash y vea el mensaje flash con un formato diferente según la definición en style.css