如何根据用户是否是Django中的管理员重定向登录URL?

如何根据用户是否是Django中的管理员重定向登录URL?,django,django-views,django-urls,django-settings,Django,Django Views,Django Urls,Django Settings,我对Django还是新手。我有一个管理员用户和一个不是管理员的普通用户。当管理员登录时,他应该被重定向到“/admin_section”&当普通用户登录时,他应该被重定向到“/”首页。除此之外,管理员还可以导航到“/”首页,并像普通用户一样查看该页面 我一直在尝试搜索这个问题的答案,我发现的唯一一件事是我可以在视图中使用request.user.is_superuser,并询问该用户是否是超级用户/管理员。但问题是,管理员将永远无法导航到首页。我还将login_redirect_url设置为“l

我对Django还是新手。我有一个管理员用户和一个不是管理员的普通用户。当管理员登录时,他应该被重定向到“/admin_section”&当普通用户登录时,他应该被重定向到“/”首页。除此之外,管理员还可以导航到“/”首页,并像普通用户一样查看该页面

我一直在尝试搜索这个问题的答案,我发现的唯一一件事是我可以在视图中使用request.user.is_superuser,并询问该用户是否是超级用户/管理员。但问题是,管理员将永远无法导航到首页。我还将login_redirect_url设置为“login_redirect_url='/'”,这意味着每次用户登录时,他们都会被重定向到frontpage,但情况不应该是这样

以下是我的代码(来自views.py文件):

forms.py:

from django.contrib.auth.forms import AuthenticationForm
from django import forms
from django.contrib.auth import logout
from django.contrib.auth.mixins import LoginRequiredMixin, AccessMixin

# a class which act as a view - it displays the login-form
class LoginForm(AuthenticationForm, AccessMixin):
    username=forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
    password=forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control'}))
URL.py:

path('login/', views_auth.LoginView.as_view(form_class=LoginForm, redirect_authenticated_user=True), name='login'), # login-page
  • 创建从内置登录视图继承的您自己的登录视图,并根据您的逻辑重写
    get\u success\u url
    方法

    from django.contrib.auth import views as views_auth
    
    class LoginView(views_auth.LoginView):
        form_class=LoginForm
        redirect_authenticated_user=True
    
        def get_success_url(self):
            # write your logic here
            if self.request.user.is_superuser:
                return '/admin_section'
            return '/'
    
    url.py
  • 在设置文件中提供新创建的视图作为登录url

    设置.py
  • 创建从内置登录视图继承的您自己的登录视图,并根据您的逻辑重写
    get\u success\u url
    方法

    from django.contrib.auth import views as views_auth
    
    class LoginView(views_auth.LoginView):
        form_class=LoginForm
        redirect_authenticated_user=True
    
        def get_success_url(self):
            # write your logic here
            if self.request.user.is_superuser:
                return '/admin_section'
            return '/'
    
    url.py
  • 在设置文件中提供新创建的视图作为登录url

    设置.py

  • 我已经用其他文件更新了我的问题。我已经为LoginView创建了一个类-我应该创建另一个类吗?@user3740970您可以使用我建议的LoginView类提供的两个参数。请参阅更新答案中的LoginView类。但在与超级用户登录时,它不会重定向到/admin_部分?这应该是可接受的答案-我将使用超级方法添加它是最明智的-查看源:@user3740970-您不需要设置中的LOGIN_URL,并验证项目URL.py是否位于放置URL的位置loginview-它应该是列表中的第一个,我已经用其他文件更新了我的问题。我已经为LoginView创建了一个类-我应该创建另一个类吗?@user3740970您可以使用我建议的LoginView类提供的两个参数。请参阅更新答案中的LoginView类。但在与超级用户登录时,它不会重定向到/admin_部分?这应该是可接受的答案-我将使用超级方法添加它是最明智的-查看源:@user3740970-您不需要设置中的LOGIN_URL,并验证项目URL.py是否位于放置URL的位置loginview-它应该是列表中的第一个
    urlpatterns = [
        path('login/', LoginView.as_view(),name='login'),
    ]
    
    LOGIN_URL = 'login'