2011-12-19 35 views
2

当用户登录时,我想检查他是否已经投票投票。如果没有,将他重定向到投票表单页面。尝试使用user_logged_in信号,但它完全忽略了我的redirect()函数。Django民意调查显示用户登录后

@receiver(user_logged_in) 
def check_poll(sender, user, request, **kwargs): 
    """Check if any active polls available and redirect user if needed""" 

    try: 
     # there can only be 1 active poll 
     poll = Poll.objects.get(active=True) 
     if not poll.has_user_voted(request.user): 
      return redirect(poll) 

    except ObjectDoesNotExist: 
     pass 

也许我这样做是错误的way..Maybe因为我不知道我应该在这里返回响应,我应该修改的请求......有没有修改登录()视图中的任何方法?

回答

5

user_logged_in信号不允许您更改对登录的响应,它只是允许您执行辅助操作。为了更改对登录的响应(默认情况下只是重定向到LOGIN_REDIRECT_URL),您需要使用自己的登录视图。但是,您的视图只能包装内置的登录视图:调用它,如果响应是重定向,并且用户尚未完成轮询,请在返回之前将重定向的“位置”标题更改为轮询页面它。