2011-02-07 14 views
4

Ruby on Railsには、flash[:notice]flash[:errorのようなメッセージを次の機会に表示する方法があります。ログインが失敗したなどの通知がリダイレクトされたとき(ログインページに戻ったときなど)に便利です。GAE(Python)にRailsの "flash"メッセージと同等のものがありますか?

Google App Engine(Python API)でこれを達成する標準的な方法がありますか? (Djangoが使用されてないであると仮定します。)

答えて

1

テンプレートに関するllazzaroのアドバイスが好きです。

ストーリーの残りの部分は、リクエスト間でフラッシュメッセージを維持することができます。

  1. セッションを処理する場合は、そのセッションにメッセージを貼り付けます。

  2. セッションサポートがない場合は、Cookieを使用する必要があります。

    クッキーを警告:

    • あなたは基本的にヘッダを自分で設定する必要がありますので、それはGAEでCookieを設定するために、驚くほど難しいです。 (クッキーを設定するためにGAEに組み込まれたAPIがある場合はこれを修正します;これはコミュニティのwikiです)。エンコードやその他の制限に注意してください(セミコロンはクッキー値の終わりを示します)。クッキーを作成して使用するための、よく書かれた機能を見つけてください。
    • プリセットメッセージを送信する場合、ブラウザのクッキーの長さ制限
    • に注意してください、だけではなく、実際のメッセージのクッキーにメッセージの一意の識別子を設定することを検討。長さやエンコーディングに問題はありません!
    • あなたのメッセージが可変である場合、上記の箇条書きのようなものがありますが、あらかじめ設定されたメッセージの代わりに、データストアオブジェクトをプッシュしてメッセージを設定し、その識別子をクッキーに書き込んでください。クッキーをワイプしてください。

あなたはフラッシュメッセージを表示する場合にかかわらず、すぐにセッションやクッキーからのメッセージをクリアします。

def add_flash(self, value, level=None, key='_flash'): 

と::

2

Webapp framework、GAEに付属して、そのようなものを提供していない単純なWebアプリケーションフレームワーク。

のFlashのメッセージは、TipfyというメッセージをGoogle App Engine専用に作成したクールなフレームワークです。
tipfy.ext.sessionモジュールの外観を持っている:

SET_FLASH(データ、キー=なし、 バックエンド=なし、** kwargsから)

は、フラッシュメッセージを設定します。フラッシュメッセージは、最初に読み込まれると削除されます。

+1

私はこのフレームワークを知りませんでした。 – llazzaro

1

テンプレートを拡張し、テンプレートに "flash"パラメータを設定するとどう思いますか?

例えば、ベーステンプレート:

<html... bla blah ... 
<body ... bla blah 
{% if flash %} {{flash}} {% endif %} 
<!-- more html here --> 
{% block content %} 

your dynamic block here... 

{% endblock %} 

は今、すべてのテンプレート

{% extends "base_template.html" %} 
{% block content %} 
    {% if object %} success to edit : {{object.title }} {% endif %} 
{% endblock %} 

であなたのハンドラは、テンプレートにフラッシュのparamを渡す必要があり、それがベーステンプレートで使用されます。

1

まあ、webapp2をを持っている

def get_flashes(self, key='_flash'): 

をあなたのメッセージを格納し、読むときにそれらを削除されること。それらをユーザーに表示するには、基本要求ハンドラーrender_templateメソッドで変数を設定するだけです。

def render_template(self, template, context=None): 
    context = context or {} 

    extra_context = { 
     'uri_for': self.uri_for, 
     'flashes': self.session.get_flashes(), 
     'user': self.current_user, 
    } 

    # Only override extra context stuff if it's not set by the template: 
    for key, value in extra_context.items(): 
     if key not in context: 
      context[key] = value 

    rendered = self.jinja2.render_template(template, **context) 
    self.response.write(rendered) 

あなたのテンプレートでは、あなたのメッセージを表示するために 'フラッシュ'変数を使用します。ここ

ドキュメント:こっちhttp://code.google.com/p/webapp-improved/source/browse/webapp2_extras/sessions.py?r=9c1ec933be7c3d8c09c9bf801ebffe2deeb922e0#127

ライブ例:https://simpleauth.appspot.com/

と例のソース:ところでhttp://code.google.com/p/gae-simpleauth/source/browse/example/handlers.py

、simpleauthアレックスとの素晴らしい作品!

1

はい、このオブジェクトでは、この機能get_flashes(key='_flash')[source]を見て:class webapp2_extras.sessions.SessionDict(container, data=None, new=False)[source]

フラッシュメッセージを返します

。フラッシュメッセージは、最初に読み込まれると削除されます。 パラメータ: key - セッションに格納されているフラッシュキーの名前。デフォルトは '_flash'です。 戻り値:
フラッシュに格納されたデータ、または空のリスト。

関連する問題