当用户登录时,我想检查他是否已经投票...如果没有,请将他重定向到投票表单页面。尝试使用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()视图的方法?
答案 0 :(得分:5)
user_logged_in
信号不允许您更改对登录的响应,它只允许您采取辅助操作。为了更改对登录的响应(默认情况下只是重定向到LOGIN_REDIRECT_URL
),您需要使用自己的登录视图。但是,您的视图可以包装内置登录视图:调用它,如果响应是重定向并且用户尚未完成轮询,请在返回之前将重定向的“Location”标题更改为poll页面它