Django,将员工从登录页面重定向到管理站点

3

我的网站基本上有两种登录方式,一种是针对普通用户的,他们会看到常规屏幕,要求他们输入用户名和密码,另一种方法是针对员工的。

员工登录后应该重定向到管理员网站,但由于某种原因,重定向没有发生,仍停留在相同的登录页面。

我在登录视图中使用了这个条件。

if user is not None and user.is_active and user.is_staff:
        auth.login(request,user)
        return HttpResponseRedirect("/admin/")

管理员网站在我的url配置中已经可以使用,但我不确定是否正确地重定向到已经登录的管理员网站。谢谢,任何帮助都将不胜感激。

你是否確定在此行程式碼之前的 if 條件式中,並沒有重定向語句只檢查 user 不是 None 且 user 是啟用狀態,而非 不是 user 是員工?換句話說,你確定這段程式碼被執行了嗎? - Amarghosh
5
请您展示更多这个视角的内容。 - Daniel Roseman
2个回答

1

一种记录用户并根据其状态重定向的方法可能是:

from django.shortcuts import redirect
from django.contrib.auth import authenticate, login


def user_login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)

        if user.is_active:    
        # Redirecting to the required login according to user status.
            if user.is_superuser or user.is_staff:
                login(request, user)
                return redirect('/admin/')  # or your url name
            else:
                login(request, user)
                return redirect('/')  

1
当用户登录时,login()函数将自动重定向用户,跳过您代码中的以下行:
return HttpResponseRedirect("/admin/")

两种可能性:

  1. 如果REDIRECT_FIELD_NAME(也称为“next”)存在于您的REQUEST字段中,则用户将立即重定向到该字段。

  2. 如果未找到REDIRECT_FIELD_NAME,则用户将被重定向到LOGIN_REDIRECT_URL,您可以在settings.py中定义它,如果没有定义,则会重定向到LOGIN_REDIRECT_URL的默认值。

因此,看起来您的代码没有设置REDIRECT_FIELD_NAME,因此自然所有用户都将被重定向到LOGIN_REDIRECT_URL的路径,无论它是什么。

要解决这个问题,请在知道用户是员工时设置request.REQUEST ['next'] ='/admin/'。然后重定向将自动发生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接