Django,从登录管理站点重定向员工

时间:2010-05-26 07:37:41

标签: django redirect login django-admin

所以我的网站基本上有两种登录方式,其中一种是针对普通用户,一种是定期屏幕,要求用户输入用户名和密码,另一种方式是针对员工。

登录后,员工登录应将其重定向到管理站点,但由于某种原因,重定向不会发生,它会保留在同一个登录页面上。

我在登录视图中使用此条件。

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

管理站点在我的网址配置中运行并运行一切,但我不知道这是否是正确的方式重定向到会话中的管理站点。

谢谢,任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

当用户登录时,login()会自动重定向用户在代码中跳过以下行:

return HttpResponseRedirect("/admin/")

两种可能性:

  1. 如果您的REQUEST字段中存在REDIRECT_FIELD_NAME(又名“next”),则会立即将用户重定向到该地址。

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

  3. 因此,您的代码似乎没有设置REDIRECT_FIELD_NAME,因此无论如何,所有用户自然会被重定向到LOGIN_REDIRECT_URL的路径。

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

答案 1 :(得分: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('/')