2011-02-07 55 views
4

Ruby on Rails有一種方法,您可以設置一條消息,如flash[:notice]flash[:error,用戶將在下一個機會看到該消息。這對於在用戶重定向時(例如回到登錄頁面)通知用戶登錄失敗等情況特別有用。在GAE(python)中是否存在等價於Rails的「flash」消息?

在Google App Engine(Python API)上實現此功能有規範還是常用的方法嗎? (假設Django使用的是而不是。)

回答

1

我喜歡llazzaro關於模板的建議。

故事的另一半是能夠維持請求之間的Flash消息。

  1. 如果您正在處理會話,請將該消息粘貼到會話中。

  2. 如果您沒有會話支持,則必須創建使用cookie。

    餅乾警告

    • 這是令人驚訝的很難設定cookies在GAE因爲你基本上要自己設置的標題。 (如果有GAE內置的API來設置cookie,請更正此問題;這是一個社區wiki)。謹防編碼和其他限制(分號表示您的cookie值結束)。找到一個寫得很好的函數來寫入cookie並使用它。
    • 請注意瀏覽器cookie的長度限制
    • 如果您要發送預設消息,請考慮在cookie中設置消息的唯一標識符而不是實際消息。你不會有長度或編碼的問題!
    • 如果您的消息是可變的,則一種可能的解決方法就像上面的項目符號點一樣,但是不是預設消息,而是在設置消息時推送數據存儲對象,將其標識符寫入cookie以及顯示消息時,在數據存儲中,然後擦除cookie。

無論如何,當你顯示的提示信息,立即清除從會話或cookie中的消息。

2

Webapp framework,GAE附帶的簡單Web應用程序框架沒有提供類似的東西。

專爲Google App Engine構建的一個酷炫框架,它提供Flash消息是Tipfy
,看一下tipfy.ext.session模塊:

set_flash(數據,鍵=無, 後端=無,** kwargs)

設置一個閃光燈消息。 Flash消息在第一次讀取時被刪除。

+1

我不知道這個框架,它似乎很酷! – llazzaro 2011-02-09 04:38:03

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

處理程序應該通過閃存參數去模板

,它將在基本模板中使用。

1

好,而webapp2確實有:

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

和:

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]

返回一個提示信息。 Flash消息在第一次讀取時被刪除。 參數: key - 存儲在會話中的閃存密鑰的名稱。默認是'_flash'。 返回:
存儲在閃存中的數據或空列表。

相關問題