【发布时间】:2013-04-28 12:38:36
【问题描述】:
使用 Django 1.5.1,我在 INSTALLED_APPS 和 MIDDLEWARE_CLASSES 中启用了会话
我有一个django.views.generic.edit.CreateView,它负责在注册时创建一个新用户。那部分工作得很好。它还会向新用户发送一封电子邮件以激活他们的帐户。这也很好用。
提交表单并确定表单有效后,将用户重定向到成功 url。在该成功 url 页面上,我想通知他们一封电子邮件已发送到他们的电子邮件地址,例如"一封电子邮件已发送至 foo@bar.com"
在重定向生成之前,我一直在表单视图中使用self.request.session['email'] = user.email。在本地(使用 sqlite DB 后端),这非常有效。当重定向加载时,我看到“一封电子邮件已发送到 foo@bar.com”。
但是,当我将其部署到暂存服务器时,我看到“一封电子邮件已发送至 。”如果我手动刷新该页面,则它会正确显示电子邮件。我的登台服务器上的数据库后端是 MySQL。
def form_valid(self, form):
user = form.save()
self.request.session['email'] = user.email
self.send_notification(user)
return super(AccountCreateFormView, self).form_valid(form)
编辑:
在模板中,我有以下内容:
An email has been sent to {{ request.session.email }}.
【问题讨论】:
-
其他基于会话的机器在生产中工作正常吗? I.E django admin,你可以在那里登录吗?
-
form_valid如果您直接将CreateView子类化,则实际上将表单保存在父类中,因此您可以执行self.request.session['email'] = form.instance.email并删除您的user对象。我知道这对你的问题没有多大帮助...... -
我可以登录 django 管理区域以及我的自定义客户区域。
-
很高兴认识 Ngenator,谢谢!
-
如果
send_notification期待User对象,我猜你不能。呃,我总是想念这样的小事,哈哈……