사용자 정의 User(둘)

3753 단어
이전 사용자 정의 User에는 Django가 자체로 가지고 있는 권한 모듈이 포함되지 않았습니다. 현재 사용자 정의 권한 모듈을 사용할 수 있는 사용자 정의 User를 지정합니다.
원래 권한 모듈을 포함하는 User 모델을 사용자 정의하려면 User 모델이 AbstractBaseUser 클래스를 계승하는 동시에PermissionsMixin 클래스도 계승하도록 해야 합니다.
Django에서 제공하는 PermissionsMixin은 Django 권한 모델을 지원하는 데 필요한 모든 방법과 데이터베이스 필드를 제공하는 추상적인 모델입니다.
PermissionsMixin은 다음과 같은 메서드와 속성을 제공합니다.
  • is_superuser
  • get_group_permissions(obj=None)
  • get_all_permissions(obj=None)
  • has_perm(perm, obj=None)
  • has_perms(perm_list, obj=None)
  • has_module_perms(package_name)

  • 다음은 Permission이 포함된 사용자 정의 User 모델의 예입니다.
    from django.db import models
    from django.contrib.auth.models import (
        BaseUserManager, AbstractBaseUser, PermissionsMixin
    )
    
    class MyUserManager(BaseUserManager):
    
        def _create_user(self, email, password, date_of_birth, is_staff, is_superuser, **extra_fields):
    
            if not email:
                raise ValueError('The given email must be set')
    
            email = self.normalize_email(email)
            user = self.model(
                email=email,
                date_of_birth=date_of_birth,
                is_staff=is_staff,
                is_active=True,
                is_superuser=is_superuser,
                **extra_fields
                )
    
            user.set_password(password)
            user.save(using=self._db)
    
            return user
    
        def create_user(self, email, date_of_birth, password=None, **extra_fields):
            return self._create_user(email, password, date_of_birth, is_staff=False, is_superuser=False, **extra_fields)
    
        def create_superuser(self, email, date_of_birth, password, **extra_fields):
            return self._create_user(email, password, date_of_birth, is_staff=True, is_superuser=True, **extra_fields)
    
    
    
    class MyUser(AbstractBaseUser, PermissionsMixin):
        email = models.EmailField(
            verbose_name='email address',
            max_length=255,
            unique=True,
        )
        date_of_birth = models.DateField()
    
        #      
        is_active = models.BooleanField(default=True)
        # is_admin = models.BooleanField(default=False)
        is_staff = models.BooleanField(default=False)
    
        #    MyUser       
        objects = MyUserManager()
    
        #   User               
        #           (        unique=True)
        USERNAME_FIELD = 'email'
    
        #    createsuperuser           
        #              
        REQUIRED_FIELDS = ['date_of_birth']
    
        #    email   
        def get_full_name(self):
            return self.email
    
        #    email   
        def get_short_name(self):
            return self.email
    
        def __str__(self):              # __unicode__ on Python 2
            return self.email
    

    세팅하는 거 잊지 마.py에는 다음 항목이 추가됩니다.
    AUTH_USER_MODEL = 'myUserApp.MyUser'
    

    셸에서 사용자 정의 User 모델을 확인합니다.
    superuser를 만들려면 다음과 같이 하십시오.
    from myUserApp.models import MyUser 
    
    u = MyUser.objects.create_superuser(
    email='[email protected]', 
    date_of_birth='1988-8-8', 
    password='********',
    )
    

    모든 사용 권한을 보려면 다음과 같이 하십시오.
    u.get_all_permissions()
    
    >>> {'auth.add_group', 'myUserApp.delete_myuser', 'auth.delete_group', 
    'sessions.change_session', 'myUserApp.change_myuser', 
    'admin.add_logentry', 'contenttypes.change_contenttype', 
    'myUserApp.add_myuser', 'auth.add_permission', 
    'contenttypes.add_contenttype', 'admin.delete_logentry', 
    'contenttypes.delete_contenttype', 'auth.delete_permission', 
    'auth.change_group', 'auth.change_permission', 'admin.change_logentry', 
    'sessions.add_session', 'sessions.delete_session'}
    

    좋은 웹페이지 즐겨찾기