【问题标题】:Override django admin authentication覆盖 django 管理员身份验证
【发布时间】:2019-07-16 19:58:08
【问题描述】:

我正在使用 django 2.1.5。我想覆盖 django 管理员身份验证过程,目标是允许 is_staff=False 的用户能够登录。因此,我正在尝试覆盖 AdminSite 并遵循此文档 (https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#overriding-default-admin-site)。这是到目前为止的代码:


my_app/forms.py

from django.contrib.admin.forms import AdminAuthenticationForm

class CustomAdminAuthenticationForm(AdminAuthenticationForm):

    def confirm_login_allowed(self, user):
        super().confirm_login_allowed(user)   # i removed is_staff checking here

my_app/admin.py

class MyAdminSite(admin.AdminSite):
    login_form = CustomAdminAuthenticationForm

    def has_permission(self, request):
        return request.user.is_active   # i also removed request.user.is_staff here

my_app/apps.py

from django.contrib.admin.apps import AdminConfig

class MyAdminConfig(AdminConfig):
    default_site = 'my_app.admin.MyAdminSite'

root/settings.py

INSTALLED_APPS = [
    'my_app.apps.MyAdminConfig',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'my_app',
]

当我尝试运行服务器时,出现错误:

ImportError: Module "my_app.admin" does not define a "MyAdminSite" attribute/class

我想我已经正确地指出了 my_app/apps.py 中的 default_site。我怎样才能解决这个问题?除了覆盖 AdminSite 之外,还有其他方法可以完成我的目标吗?谢谢。

【问题讨论】:

    标签: python django django-admin django-authentication


    【解决方案1】:

    这似乎很麻烦,而不是仅仅为每个用户分配员工角色。 Django docsUser 中的is_staff 字段定义为“[d] 表示此用户是否可以访问管理站点”的布尔值。这不正是你想要的吗?

    换句话说:如果您希望所有用户都能够访问管理站点,您还需要什么is_staff 来阻止您将所有用户都变成员工?

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2011-05-10
      • 2011-09-18
      • 2018-05-02
      • 1970-01-01
      相关资源
      最近更新 更多