【发布时间】:2018-11-25 04:46:36
【问题描述】:
我有这个设置会话变量的重定向视图。但是好像会话在被重定向到的视图被调用之前是flushed,因为整个会话在那里是空的。
(顺便说一句,这是真正的代码,我已经剪切了一些东西来查找原因但仍然找不到它。
class ActivateUserView(RedirectView):
def get(self, request, *args, **kwargs):
# activates user and redirects to listing
listing = Listing.objects.get(id=2)
request.session['test'] = 'icle'
print("Session set to: ", request.session.get('test', "Nothing!"))
return HttpResponseRedirect(reverse('listing-detail', kwargs={'pk': listing_pk, 'slug': listing.slug}))
上面的视图被重定向到:
class ListingDetailView(TemplateView):
template_name = "frontend/detail.html"
@method_decorator(ensure_csrf_cookie)
def get(self, request, *args, **kwargs):
print("Session data: ", request.session.get('test', "Nothing!"))
return super(ListingDetailView, self).get(request, *args, **kwargs)
在控制台中,我得到:
Session set to: icle
Session data: Nothing!
我已经检查了 django-debug-toolbar,在这里和那里引发异常,在重定向调用和视图之间的某个地方,所有会话数据都被删除了。
【问题讨论】:
-
由于您正在修改顶级会话密钥,django 应该会看到并保存会话,所以有些不对...您可以分别尝试这两种方法,看看是否有任何区别? 1.手动调用request.session.save()。 2.设置'test'值后,设置
request.session.modified = True。请注意,这些不应该是最终解决方案,我只是好奇这是否会改变行为。 -
谢谢,但我找到了...我已将
SESSION_COOKIE_SECURE设置为 True,但在开发模式下我没有使用 https...我会回答我的问题并将其留给如果需要删除它,请使用 mods。