用户登录后显示Django民意调查

时间:2011-12-19 21:47:49

标签: django redirect request signals authentication

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

@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

也许我这样做的方式不对。也许我应该修改请求,因为我不确定我应该在这里返回响应...有没有修改login()视图的方法?

1 个答案:

答案 0 :(得分:5)

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