Turbogears-flash-messages
TurboGears –フラッシュメッセージ
TurboGearsは、目立たない方法でユーザーに情報を通知するための非常に便利なメッセージングシステムを提供します。 tgモジュールのTGFlashクラスは、プレーンCookieに保存されているメッセージのフラッシュをサポートします。 このクラスは、JavaScriptを介したクライアント側だけでなくサーバー側でのフラッシュメッセージの取得をサポートします。
TGFlashクラスの* render()メソッドをPython自体から使用する場合、テンプレートから呼び出してフラッシュメッセージをレンダリングできます。 JavaScriptで使用する場合、WebFlashオブジェクトを提供します。 * payload()*および render()*メソッドを公開して、現在のフラッシュメッセージを取得し、JavaScriptからレンダリングします。
「クイックスタート」を使用してTurboGearsプロジェクトを作成すると、Masterlテンプレートが作成されます。 その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オブジェクトで、レンダリングされたテンプレート内で *masterl* テンプレートを含めることで利用できます。 このオブジェクトを使用すると、現在のフラッシュメッセージを取得して表示できます。
Flashメッセージは、* tg.flash()*メソッドを使用して、Cookie(デフォルトではwebflash)に保存されます。 その後、メッセージとステータスパラメータがそれに渡されます。
tg.flash('Message', 'status')
フラッシュと呼ばれるメソッドがリダイレクトを実行する場合、リダイレクトされたページ内にフラッシュが表示されます。 メソッドがテンプレートを直接公開する場合、フラッシュはテンプレート自体の内部に表示されます。
ステータスコードにCSSスタイルを適用することにより、フラッシュメッセージの外観をカスタマイズできます。 「クイックスタート」プロジェクトには、スタイルシートpublic/css/style.cssによってカスタマイズされたエラー、警告、情報、およびOKステータスコードが含まれます。 スタイル付きのステータスコードを追加することもできます。
#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メッセージサポートの構成は、TGFlashオブジェクトのconfigure()メソッドのパラメーターを設定するか、app_cfg.py(configフォルダー内)でパラメーターを設定することで実現できます。 設定可能なパラメータは次のとおりです-
| Sr.No. | Parameters & Description |
|---|---|
| 1 |
flash.cookie_name フラッシュメッセージの保存に使用されるCookieの名前。 デフォルトは webflash です。 |
| 2 |
flash.default_status 指定しない場合のデフォルトのメッセージステータス(デフォルトでOK) |
| 3 |
flash.template レンダリング時に* flashテンプレート*として使用されます。 |
| 4 |
flash.allow_html
|
| 5 |
JavaScriptからフラッシュを表示するときに実行されるJavaScriptコード。 デフォルトは* webflash.render()*です |
| 6 |
flash.js_template
|
- * pop_payload()-関数*現在のフラッシュメッセージ、ステータス、および関連情報を取得します。 フラッシュメッセージを取得すると、Cookieが削除されます。
- * render(container_id、use_js = True)*-テンプレート内のフラッシュメッセージをレンダリングするか、Javascriptサポートを提供します。
- container_id はメッセージが表示されるDIVであり、use_jsはフラッシュをHTMLとしてレンダリングするかJavaScriptを使用するかを切り替えます。
- status -現在のフラッシュステータスのみを取得し、フラッシュステータスを取得するとCookieが削除されます。
- メッセージ-現在のフラッシュメッセージのみを取得し、フラッシュメッセージを取得するとCookieが削除されます。
シンプルなFlashメッセージを作成する方法は?
次の例では、ルートコントローラークラスでflash()メソッドが提供されています。 公開されたテンプレートflashlにレンダリングされるflash()メッセージを呼び出します
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 {}
テンプレートフォルダーに flashl を作成するためのコードは次のとおりです。
<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の定義に従って異なる形式のフラッシュメッセージを確認します。