注册后和注销后,应将用户重定向到“登录”页面。在这两种情况下,都必须显示一条消息,指示相关消息。
使用django.contrib.auth.views.login
如何发送这些{{info}}消息。
可能的选择是将auth.views
复制到新注册模块并包含所有必要的内容。但这似乎不够干净。
最好的方法是什么。
对于正常情况,当您想要向某个用户指示您可以使用的操作的响应时
request.user.message_set.create()
这会创建一条消息,显示在其中一个模板中并自动删除。
但是,此消息系统仅适用于继续具有相同会话ID的登录用户。在注册的情况下,用户未经过身份验证,并且在会话更改的情况下注销,此系统无法使用。
除此之外,来自login
的内置logout
和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})
即使这样也行不通。
显然我可以定义一个registered.html并在那里添加这个静态消息,但是我懒得写另一个模板并尝试实现它干。
我意识到“已注册”消息和“已注销”消息的情况不同。我用过DRY方法,我会写一个答案。
答案 0 :(得分:3)
如果消息是静态的,您可以使用自己的模板来查看这些视图:
(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'myapp/login.html'}
来自docs。
答案 1 :(得分:1)
我认为解决此问题的最佳方法是使用“flash”类型的基于会话的邮件系统。有几个浮动:django-flash似乎非常好,我使用django-session-messages非常简单。希望当我们到达Django 1.2时,这将被烘焙。
答案 2 :(得分:0)
您有请求上下文处理器将此类信息添加到每个呈现的模板的上下文中。
这是做这种事情的“零影响”方式。您不更新任何视图函数,因此它符合DRY的某些定义。
请参阅http://docs.djangoproject.com/en/dev/ref/templates/api/#id1
首先,编写自己的login.html模板。
其次,编写自己的上下文函数,以提供必须插入模板的任何其他信息。
第三,更新设置,将您的上下文处理器添加到TEMPLATE_CONTEXT_PROCESSORS
设置。