我正在使用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
我认为我已经正确地将default_site指向my_app / apps.py。我怎样才能解决这个问题?除了覆盖AdminSite之外,还有其他方法可以完成我的目标吗?谢谢。
答案 0 :(得分:0)
这似乎很麻烦,而不仅仅是给每个用户分配职员角色。 Django docs在is_staff
中将User
字段定义为一个布尔值,表示“ [d]表示此用户是否可以访问管理站点”。这不是你想要的吗?
换句话说:如果您希望所有用户都可以访问管理网站,您还需要is_staff
阻止您将所有用户都变成工作人员吗?