首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何允许超级用户访问Django管理面板

如何允许超级用户访问Django管理面板
EN

Stack Overflow用户
提问于 2020-08-05 08:20:02
回答 2查看 786关注 0票数 0

我有以下自定义用户模型的代码。谁能帮我解决我的,一个解决方案,以限制超级用户访问管理网站,只有。提前感谢

代码语言:javascript
复制
# UserManager is for Custom User Model to override Django's Default Model
class UserManager(BaseUserManager):
def _create_user(self, email, password, is_superuser, **extra_fields):
    if not email or not password:
        raise ValueError("The given username or password must not be null")
    user = self.model(
        email=email,
        password=password,
        is_superuser=is_superuser,
        last_login=now,
        **extra_fields
    )
    user.set_password(password)
    user.save(using=self._db)
    return user

    def create_user(self, email, password=None, **extra_fields):
        return self._create_user(email, password, False, **extra_fields)

    def create_superuser(self, email, password=None, **extra_fields):
        return self._create_user(email, password, True, **extra_fields)


    class Users(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
created_at_utc = models.DateTimeField(auto_now_add=True)

objects = UserManager()

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['password']
def __str__(self):
    return self.email

def has_perm(self, perm, obj=None):
    "Does the user have a specific permission?"
    # Simplest possible answer: Yes, always
    return True

def has_module_perms(self, app_label):
    "Does the user have permissions to view the app `app_label`?"
    # Simplest possible answer: Yes, always
    return self.is_admin

def is_staff(self):
    "Is the user a member of staff?"
    # Simplest possible answer: All admins are staff
    return self.is_admin

class Meta:
    db_table = "users"

我有上面的代码为用户,下面的代码为管理面板创建和更新用户的谁可以帮助我用一个解决方案,以限制超级用户访问管理网站仅。提前感谢

代码语言:javascript
复制
class UserCreateForm(UserCreationForm):
    class Meta:
        model = Users
        fields = (
            "email","is_admin","is_superuser",
        )


class UserChangeForm(BaseUserChangeForm):
    class Meta:
        model = Users
        fields = (
            "email","is_admin",
        )


class UserAdmin(BaseAdmin):
    form = UserChangeForm
    add_form = UserCreateForm

    fieldsets = (
        (None, {"fields": ("email", "password","is_active","is_admin","is_superuser")}),
    )

    add_fieldsets = (
        (None, {
            "classes": ("wide",),
            "fields": ("email", "password1", "password2","is_active","is_admin","is_superuser")}
        ),
    )
    filter_horizontal = ()

    list_display = ("email","is_active", )       
    list_filter = ("is_active", )    
    search_fields = ("email",)       
    ordering = ("email",)

# Register your models here.
admin.site.register(Users, UserAdmin)

我尝试过许多解决方案,以限制超级用户访问管理员页面时,登录细节是提供的。谁能帮我解决我的解决方案,以限制超级用户访问管理网站仅。提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-05 10:05:37

我认为您正在寻找的字段是is_staff,它位于

class AbstractUser(AbstractBaseUser, PermissionsMixin):

您可以从

from django.contrib.auth.models import AbstractUser

您会发现它有一个名为is_staff的字段,所以这基本上是布尔字段,它决定用户是否有登录管理站点的权限,以获得更多的信息,可以进行google搜索或找到下面的文章。

https://www.webforefront.com/django/adminpermissions.html

我看到您已经将函数创建为def is_staff(self):但是您没有使用字段is_staff

票数 1
EN

Stack Overflow用户

发布于 2021-10-03 11:21:50

也有同样的问题。而不是password=None,而是将其改为password。并将password=passwordusername=username一起传递到create_user函数中,如下所示

代码语言:javascript
复制
class MyAccountManager(BaseUserManager):
    def create_user(self, email, username, password):
        if not email:
            raise ValueError('Please add an email address')
        if not username:
            raise ValueError('Please add an username')

        user = self.model(email=self.normalize_email(
            email), username=username, password=password)

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, username, password):
        user = self.create_user(email=self.normalize_email(
            email), username=username, password=password)

        user.is_active = True
        user.is_admin = True
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)
        return user

希望它对你有用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63261120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档