2011-02-07 54 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'。 返回:
存储在闪存中的数据或空列表。

相关问题