Учебники

TurboGears — Flash сообщения

TurboGears предоставляет очень удобную систему обмена сообщениями для уведомления пользователя в ненавязчивой форме. Класс TGFlash в модуле tg обеспечивает поддержку перепрошивки сообщений, которые хранятся в обычном cookie. Этот класс поддерживает выбор флэш-сообщений на стороне сервера, а также на стороне клиента через JavaScript.

Метод render () класса TGFlash, когда используется из самого Python, может быть вызван из шаблона для визуализации флеш-сообщения. Если используется на JavaScript, он предоставляет объект WebFlash. Он предоставляет методы payload () и render () для извлечения текущего флеш-сообщения и его рендеринга из 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-сообщения хранятся в файле cookie (имя которого по умолчанию — webflash) с помощью метода tg.flash () . Сообщение и параметры состояния затем передаются ему.

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

Если метод, называемый flash, выполняет перенаправление, тогда flash будет виден внутри перенаправленной страницы. Если метод непосредственно предоставляет шаблон, то флэш-память будет видна внутри самого шаблона.

Внешний вид флеш-сообщения можно настроить, применив стиль CSS к коду состояния. «Быстрый старт» проекта содержит коды ошибок, предупреждений, информации и статуса ok, настроенные таблицей стилей 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 может быть достигнуто путем установки параметров для метода configure () объекта TGFlash или в файле app_cfg.py (в папке config). Настраиваемые параметры:

Sr.No. Параметры и описание
1

flash.cookie_name

Имя файла cookie, используемого для хранения флеш-сообщений. По умолчанию используется webflash .

2

flash.default_status

Статус сообщения по умолчанию, если не указан (по умолчанию нормально)

3

flash.template

Используется как флэш-шаблон при визуализации.

4

flash.allow_html

Включает / выключает экранирование во флеш-сообщениях , по умолчанию HTML не разрешен.

5

flash.js_call

Код JavaScript, который будет запускаться при отображении flash из JavaScript. По умолчанию используется webflash.render ()

6

flash.js_template

Экземпляр string.Template используется для замены полной поддержки JavaScript для флеш-сообщений.

flash.cookie_name

Имя файла cookie, используемого для хранения флеш-сообщений. По умолчанию используется webflash .

flash.default_status

Статус сообщения по умолчанию, если не указан (по умолчанию нормально)

flash.template

Используется как флэш-шаблон при визуализации.

flash.allow_html

Включает / выключает экранирование во флеш-сообщениях , по умолчанию HTML не разрешен.

flash.js_call

Код JavaScript, который будет запускаться при отображении flash из JavaScript. По умолчанию используется webflash.render ()

flash.js_template

Экземпляр string.Template используется для замены полной поддержки JavaScript для флеш-сообщений.

  • pop_payload () — функция выбирает текущее флэш-сообщение, статус и связанную информацию. Получение флеш-сообщения приведет к удалению куки.

  • render (container_id, use_js = True) — визуализировать флеш-сообщение внутри шаблона или обеспечить поддержку Javascript для них.

  • container_id — это DIV, в котором будут отображаться сообщения, а use_js переключается между рендерингом флэш-памяти в формате HTML или для использования JavaScript.

  • status — Получить только текущее состояние Flash, получение статуса Flash удалит cookie.

  • сообщение — Получить только текущее флеш-сообщение, получение флеш-сообщения приведет к удалению куки.

pop_payload () — функция выбирает текущее флэш-сообщение, статус и связанную информацию. Получение флеш-сообщения приведет к удалению куки.

render (container_id, use_js = True) — визуализировать флеш-сообщение внутри шаблона или обеспечить поддержку Javascript для них.

container_id — это DIV, в котором будут отображаться сообщения, а use_js переключается между рендерингом флэш-памяти в формате HTML или для использования JavaScript.

status — Получить только текущее состояние Flash, получение статуса Flash удалит 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 {}

Код для создания 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