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

Rob*_*ert 2 authentication django redirect signals request

当用户登录时,我想检查他是否已经投票.如果没有,请将他重定向到投票表单页面.尝试使用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
Run Code Online (Sandbox Code Playgroud)

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

Car*_*yer 5

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