Django — Conditional Login Redirect

别说谁变了你拦得住时间么 提交于 2020-01-09 04:55:06

问题


I am working on a Django application that will have two types of users: Admins and Users. Both are groups in my project, and depending on which group the individual logging in belongs to I'd like to redirect them to separate pages. Right now I have this in my settings.py

LOGIN_REDIRECT_URL = 'admin_list'

This redirects all users who sign in to 'admin_list', but the view is only accessible to members of the Admins group -- otherwise it returns a 403. As for the login view itself, I'm just using the one Django provides. I've added this to my main urls.py file to use these views:

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

How can I make this so that only members of the Admins group are redirect to this view, and everyone else is redirected to a different view?


回答1:


Create a separate view that redirects user's based on whether they are in the admin group.

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")

Add the view to your urls.py,

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

then use it for your LOGIN_REDIRECT_URL setting.

LOGIN_REDIRECT_URL = 'login_success'



回答2:


I use an intermediate view to accomplish the same thing:

LOGIN_REDIRECT_URL = "/wherenext/"

then in my urls.py:

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

then in the view:

@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'))


来源:https://stackoverflow.com/questions/16824004/django-conditional-login-redirect

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!