13

我正在开发一个 Django 应用程序,它将有两种类型的用户:管理员和用户。两者都是我项目中的组,根据个人登录所属的组,我想将它们重定向到单独的页面。现在我的settings.py中有这个

LOGIN_REDIRECT_URL = 'admin_list'

这会将所有登录到“admin_list”的用户重定向到“admin_list”,但该视图只能由 Admins 组的成员访问——否则它会返回 403。至于登录视图本身,我只是使用 Django 提供的一个。我已将此添加到我的主 urls.py 文件中以使用这些视图:

url(r'^accounts/', include('django.contrib.auth.urls')),

我怎样才能做到这一点,以便只有 Admins 组的成员被重定向到该视图,而其他所有人都被重定向到不同的视图?

4

2 回答 2

32

创建一个单独的视图,根据用户是否在管理员组中重定向用户。

from django.shortcuts import redirect

def login_success(request):
    """
    Redirects users based on whether they are in the admins group
    """
    if request.user.groups.filter(name="admins").exists():
        # user is an admin
        return redirect("admin_list")
    else:
        return redirect("other_view")

将视图添加到您的urls.py,

url(r'login_success/$', views.login_success, name='login_success')

然后将其用于您的LOGIN_REDIRECT_URL设置。

LOGIN_REDIRECT_URL = 'login_success'
于 2013-05-29T21:39:48.537 回答
5

我使用中间视图来完成同样的事情:

LOGIN_REDIRECT_URL = "/wherenext/"

然后在我的 urls.py 中:

(r'^wherenext/$', views.where_next),

然后在视图中:

@login_required
def wherenext(request):
    """Simple redirector to figure out where the user goes next."""
    if request.user.is_staff:
        return HttpResponseRedirect(reverse('admin-home'))
    else:
        return HttpResponseRedirect(reverse('user-home'))
于 2013-05-29T21:46:16.900 回答