TurboGears - Messaggi Flash

TurboGears fornisce un sistema di messaggistica molto conveniente per notificare le informazioni all'utente in modo non invadente. La classe TGFlash nel modulo tg fornisce il supporto per i messaggi lampeggianti memorizzati in un semplice cookie. Questa classe supporta il recupero di messaggi flash sul lato server e sul lato client tramite JavaScript.

Il render()Il metodo della classe TGFlash, se usato da Python stesso, può essere invocato dal template per rendere un messaggio flash. Se utilizzato su JavaScript, fornisce un oggetto WebFlash. Esponepayload() e render() metodi per recuperare il messaggio flash corrente e renderlo da JavaScript.

Quando un progetto TurboGears viene creato utilizzando "avvio rapido", ha un modello Master.html. Contiene la definizione di una variabile di quell'oggetto flash. Il contenuto di questo messaggio flash ricevuto dal controller sostituisce il segnaposto contrassegnato in questo modello.

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

Il tg.flash_obj è l'oggetto WebFlash, che è disponibile all'interno di qualsiasi modello renderizzato includendo master.htmlmodello. Questo oggetto permette di recuperare il messaggio flash corrente e di visualizzarlo.

I messaggi Flash vengono memorizzati in un cookie (il cui nome per impostazione predefinita è webflash) utilizzando tg.flash()metodo. Il messaggio e i parametri di stato vengono quindi passati ad esso.

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

Se il metodo chiamato flash esegue un reindirizzamento, il flash sarà visibile all'interno della pagina reindirizzata. Se il metodo espone direttamente un modello, il flash sarà visibile all'interno del modello stesso.

L'aspetto del messaggio flash può essere personalizzato applicando lo stile CSS al codice di stato. Un progetto "quickstarted" contiene errori, avvertenze, informazioni e codici di stato ok personalizzati da un foglio di stile public / css / style.css. È inoltre possibile aggiungere più codici di stato con stili.

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

Questo foglio di stile esterno deve essere incluso nel modello -

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

La configurazione di qualsiasi supporto per messaggi Flash può essere ottenuta impostando i parametri per il metodo configure () dell'oggetto TGFlash o in app_cfg.py (nella cartella config). I parametri configurabili sono:

Sr.No. Parametri e descrizione
1

flash.cookie_name

Nome del cookie utilizzato per memorizzare i messaggi flash. L'impostazione predefinita èwebflash.

2

flash.default_status

Stato del messaggio predefinito se non specificato (ok per impostazione predefinita)

3

flash.template

Usato come flash template quando reso.

4

flash.allow_html

Giri on/off escaping in flash messages, per impostazione predefinita HTML non è consentito.

5

flash.js_call

Codice JavaScript che verrà eseguito durante la visualizzazione del flash da JavaScript. L'impostazione predefinita èwebflash.render()

6

flash.js_template

string.Template istanza utilizzata per sostituire il supporto completo di JavaScript per i messaggi flash.

  • pop_payload() - funzione fetches current flash message, statuse informazioni correlate. Ottenere il messaggio flash cancellerà il cookie.

  • render(container_id, use_js=True) - Rendere il messaggio flash all'interno del modello o fornire supporto Javascript per loro.

  • container_id è il DIV in cui verranno visualizzati i messaggi, mentre use_js alterna il rendering del flash come HTML o l'utilizzo di JavaScript.

  • status - Ottieni solo lo stato di flash corrente, ottenere lo stato di flash cancellerà il cookie.

  • message - Ottieni solo il messaggio flash corrente, ottenere il messaggio flash cancellerà il cookie.

Come creare un semplice messaggio flash?

Nell'esempio seguente, viene fornito un metodo flash () nella classe del controller principale. Chiama un messaggio flash () che viene visualizzato nel template esposto, 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 {}

Il codice per fare flash.html nella cartella dei modelli è la seguente

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

Avvia il server ed entra http://localhost:8080/flash?user=MVL nel browser

Cambia URL in http://localhost:8080/flash e vedere il messaggio flash formattato in modo diverso come da definizione in style.css