覆盖 django 管理员身份验证
Override django admin authentication
我正在使用 Django 2.1.5。我想覆盖 django 管理员身份验证过程,objective 允许 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 之外,还有其他方法可以完成我的 objective 吗?谢谢。
这似乎很麻烦,而不是仅仅为每个用户分配职员角色。 Django docs 将 User
中的 is_staff
字段定义为一个布尔值,表示“[d]指定此用户是否可以访问管理站点”。这不就是你想要的吗?
换句话说:如果您希望所有用户都能够访问管理站点,您还需要什么 is_staff
来阻止您将所有用户设为员工?
我正在使用 Django 2.1.5。我想覆盖 django 管理员身份验证过程,objective 允许 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 之外,还有其他方法可以完成我的 objective 吗?谢谢。
这似乎很麻烦,而不是仅仅为每个用户分配职员角色。 Django docs 将 User
中的 is_staff
字段定义为一个布尔值,表示“[d]指定此用户是否可以访问管理站点”。这不就是你想要的吗?
换句话说:如果您希望所有用户都能够访问管理站点,您还需要什么 is_staff
来阻止您将所有用户设为员工?