2

用户应在注册后和注销后重定向到登录页面。在这两种情况下,都必须显示一条指示相关消息的消息。

使用django.contrib.auth.views.login我如何发送这些 {{ info }} 消息。

一个可能的选择是将复制auth.views到新的注册模块并包含所有必要的东西。但这似乎还不够干。

什么是最好的方法。

更新:问题阐述:

对于正常情况,当您想向某些用户指示您可以使用的操作的响应时

request.user.message_set.create()

这将创建一条消息,该消息显示在其中一个模板中并自动删除。

但是,此消息系统仅适用于继续具有相同会话 ID 的登录用户。在注册的情况下,用户没有经过身份验证,并且在由于会话更改而退出的情况下,无法使用该系统。

除此之外,内置函数loginlogout函数django.contrib.auth.views返回一个“HttpResponseRedirect”,这使得无法向模板添加另一个变量。

我尝试在请求对象本身上进行设置

request.info='Registered'

并在不同的视图中检查

try:
   info = request.info:
   del request.info
except:
   info = ''

#later
render_to_response('app/file',{'info':info})

即使这样也没有用。

显然,我可以定义一个已注册的.html 并在其中添加此静态消息,但我懒得编写另一个模板并尝试 DRY 实现它。

我意识到“注册”消息和“注销”消息的情况不同。我使用的 DRY 方法,我将写为答案。

4

3 回答 3

3

如果消息是静态的,您可以为这些视图使用自己的模板:

(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'myapp/login.html'}

文档

于 2009-06-02T08:22:24.143 回答
1

我认为这个问题的最佳解决方案是使用“flash”类型的基于会话的消息传递系统。有几个浮动:django-flash看起来非常好,我使用非常简单的 django-session-messages 。希望当我们到达 Django 1.2 时,这将被纳入。

于 2009-06-03T19:46:44.363 回答
0

您有请求上下文处理器将此类信息添加到要呈现的每个模板的上下文中。

这是做这种事情的“零影响”方式。您不更新任何视图函数,因此它符合 DRY 的一些定义。

请参阅http://docs.djangoproject.com/en/dev/ref/templates/api/#id1

首先,编写自己的 login.html 模板。

其次,编写您自己的上下文函数以提供必须插入到模板中的任何附加信息。

第三,更新设置以将您的上下文处理器添加到TEMPLATE_CONTEXT_PROCESSORS设置中。

于 2009-06-02T10:13:34.357 回答