会话超时后,使用Django LoginRequiredMixin处理Ajax请求

时间:2018-12-28 10:42:42

标签: python ajax django

这种情况在其他帖子中已有介绍,但是在大多数情况下,解决方案已经过时,仅适用于基于功能的视图。

我的问题很简单: 现在,我的应用使用以下参数在Django网站上强制执行会话超时:

SESSION_SAVE_EVERY_REQUEST = True
SESSION_COOKIE_AGE = 600

大多数视图都使用LoginrequiredMixin。 它工作正常,但使用AJAX显然不起作用。在Internet上找到的常见解决方案是将身份验证控制的行为更改为返回403。是否可以替代LoginRequiredMixin来针对Ajax请求这样做?或者也许只是放弃,并在客户端完全使用javascript做到这一点?

1 个答案:

答案 0 :(得分:1)

尝试这样

class MyView(LoginRequiredMixin, View):
     def handle_no_permission(self):
         if not self.request.is_ajax():
             return super().handle_no_permission()
         return JsonResponse({
             'code': 'Auth Required',
             'message': 'Session timeout!'
         }, status=401)