首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django 1.5会话变量在Post-Redirect-Get后不显示

Django 1.5会话变量在Post-Redirect-Get后不显示
EN

Stack Overflow用户
提问于 2013-04-24 23:10:18
回答 1查看 587关注 0票数 1

使用Django 1.5.1,我在INSTALLED_APPSMIDDLEWARE_CLASSES中启用了会话

我有一个django.views.generic.edit.CreateView,负责在注册时创建一个新用户。这部分工作得很好。它还会向新用户发送一封电子邮件,以激活其帐户。这也很好用。

在表单被提交并且表单被确定为有效之后,用户被重定向到成功url。在成功的url页面上,我想通知他们已经向他们的电子邮件地址发送了一封电子邮件,例如“已向foo@bar.com发送电子邮件”

在生成重定向之前,我一直在窗体视图中使用self.request.session['email'] = user.email。在本地(它使用sqlite DB后端),这可以很好地工作。当重定向加载时,我看到“一封电子邮件已发送到foo@bar.com”。

但是,当我将其部署到我的临时服务器时,我看到“一封电子邮件已发送到”。如果我手动刷新该页面,它将正确显示电子邮件。我的临时服务器上的DB后端是MySQL。

代码语言:javascript
复制
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)

编辑:

在模板中,我有以下内容:

代码语言:javascript
复制
An email has been sent to {{ request.session.email }}.
EN

回答 1

Stack Overflow用户

发布于 2013-04-28 12:38:37

在这个问题上花了一天的时间后,我发现了解决方案:

我从uWSGI 1.0.2.1升级到1.9.8

我验证了返回到1.0.2.1会导致问题再次浮出水面。我没有解释为什么会出现这种情况,但尽管如此,使用最新的uWSGI可能也不是一个坏主意。

进一步的调查显示,我遇到的问题也发生在其他领域。例如:

在管理区域中,我将用户从活动状态更改为非活动状态,然后保存表单,将我重定向回用户列表。单击我刚刚停用的同一用户后,复选框将显示为选中状态。刷新页面将显示"Active“不再处于选中状态。

这是您可能没有预料到的部分:第二次刷新页面将导致Active显示为选中状态!

我在我自己的表单中也看到了同样的行为。所以我创建了一个只包含request.user.first_name{% now "U u" %}的简单模板。时间戳的目的是确定呈现的模板是否被缓存。

在一个选项卡中,我更新了用户的名字。在另一个选项卡中,我快速刷新了新模板。这导致它在值和值之间切换。时间戳已正确递增,没有缓存。

我想可能是因为我的浏览器(firefox)。我在隐身模式下打开了chrome。在chrome中,我打开了新的模板。在firefox中,我提交了更改用户名的表单。回到chrome,我开始快速刷新。完全一样的行为。

跳到dbshell并直接访问mysql数据库总是给出正确的值,而不是交替。

为了排除某些事情,我尝试了以下方法:

  • 将默认的CACHES后端设置为DummyCache (不起作用),
  • CACHE_MIDDLEWARE_ANONYMOUS_ONLY设置为django-debug-toolbar以直接查看SQL。快速刷新工具栏的sql会导致它也替换其他值!

我是在升级到django 1.5.1之后才开始观察这个问题的。之前我使用的是django 1.4.2。

总之,我建议将其称为django/uwsgi不确定性原理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16195624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档