TurboGears - Mensagens Flash

O TurboGears fornece um sistema de mensagens muito conveniente para notificar informações ao usuário de uma forma não invasiva. A classe TGFlash no módulo tg fornece suporte para mensagens instantâneas armazenadas em um cookie simples. Esta classe suporta a busca de mensagens flash no lado do servidor, bem como no lado do cliente, por meio de JavaScript.

o render()O método da classe TGFlash, quando usado a partir do próprio Python, pode ser invocado a partir do modelo para renderizar uma mensagem flash. Se usado em JavaScript, fornece um objeto WebFlash. Expõepayload() e render() métodos para buscar a mensagem flash atual e renderizá-la em JavaScript.

Quando um projeto TurboGears é criado usando 'início rápido', ele tem um modelo Master.html. Ele contém a definição de uma variável desse objeto flash. O conteúdo desta mensagem flash recebida do controlador substitui o marcador de posição marcado neste modelo.

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

o tg.flash_obj é o objeto WebFlash, que está disponível dentro de qualquer modelo renderizado, incluindo master.htmlmodelo. Este objeto permite recuperar a mensagem flash atual e exibi-la.

As mensagens Flash são armazenadas em um cookie (cujo nome por padrão é webflash) usando tg.flash()método. A mensagem e os parâmetros de status são então passados ​​para ele.

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

Se o método chamado flash realizar um redirecionamento, o flash ficará visível dentro da página redirecionada. Se o método expõe diretamente um modelo, o flash ficará visível dentro do próprio modelo.

A aparência da mensagem flash pode ser personalizada aplicando o estilo CSS ao código de status. Um projeto de 'início rápido' contém códigos de erro, aviso, informações e status ok personalizados por uma folha de estilo public / css / style.css. Mais códigos de status com estilos também podem ser adicionados.

#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 folha de estilo externa precisa ser incluída no modelo -

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

A configuração de qualquer suporte de mensagem Flash pode ser obtida definindo parâmetros para o método configure () do objeto TGFlash ou em app_cfg.py (na pasta config). Os parâmetros configuráveis ​​são -

Sr. Não. Parâmetros e descrição
1

flash.cookie_name

Nome do cookie usado para armazenar mensagens flash. O padrão éwebflash.

2

flash.default_status

Status da mensagem padrão se não for especificado (ok por padrão)

3

flash.template

Usado como o flash template quando renderizado.

4

flash.allow_html

Turns on/off escaping in flash messages, por padrão, HTML não é permitido.

5

flash.js_call

Código JavaScript que será executado ao exibir o flash do JavaScript. O padrão éwebflash.render()

6

flash.js_template

string.Template instância usada para substituir o suporte JavaScript completo para mensagens flash.

  • pop_payload() - função fetches current flash message, statuse informações relacionadas. Receber a mensagem flash excluirá o cookie.

  • render(container_id, use_js=True) - Renderize a mensagem flash dentro do template ou forneça suporte Javascript para eles.

  • container_id é o DIV onde as mensagens serão exibidas, enquanto use_js alterna entre renderizar o flash como HTML ou para uso de JavaScript.

  • status - Obtenha apenas o status atual do flash, obter o status do flash excluirá o cookie.

  • message - Obter apenas a mensagem flash atual, obter a mensagem flash excluirá o cookie.

Como fazer uma mensagem simples em Flash?

No exemplo a seguir, um método flash () é fornecido na classe do controlador raiz. Ele chama uma mensagem flash () que é renderizada no modelo exposto, 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 {}

O código para fazer flash.html na pasta de modelos é a seguinte

<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 o servidor e entre http://localhost:8080/flash?user=MVL no navegador

Alterar URL para http://localhost:8080/flash e ver a mensagem flash formatada de maneira diferente conforme a definição em style.css