1

異なるログイン システムを持つ 3 種類のユーザー。

  1. Student : ログインには一意の student_id とパスワードを使用します。
  2. SchoolAdmin: ログインに電子メールとパスワードを使用します。
  3. 開発者 (チーム): ログインに電子メールとパスワードを使用し、管理パネルにログインできます。

これが私のBaseUserです

class BaseUSER(AbstractBaseUser):

  email = models.EmailField(unique=True)
  first_name = models.CharField(max_length=50, null=True, blank=True)
  last_name = models.CharField(max_length=50, null=True, blank=True)

  USERNAME_FIELD = 'email'

これが私のユーザーNo.1の学生です

class StudentUser(BaseUSER):

  student_id = models.CharField(primary_key=True,max_length=10)
  address = models.CharField(max_length=500, blank=True)
  city = models.CharField(max_length=50,blank=True, null=True)
  state = models.CharField(max_length=50, blank=True, null=True)
  pincode = models.CharField(max_length=6,blank=True, null=True)
  email_id =  models.EmailField(blank=True)
  phone_number = models.CharField(max_length=10, blank=True, null=True)
  mother_phone = models.CharField(max_length=10, blank=True, null=True)
  father_phone = models.CharField(max_length=10, blank=True, null=True)
  standard = models.CharField(max_length=2,blank=True, null=True)
  # bus_transport = models.ForeignKey(Bus,blank=True,null=True)

  USERNAME_FIELD = 'student_id'

ここに私のユーザー番号 2 の SchoolAdmin があります

class SchoolAdmin(BaseUSER):

  school = models.ForeignKey(School,blank=True,null=True)

  objects = NewUserManager()

  USERNAME_FIELD = 'email'

これが私のユーザー番号です。3 開発者チーム (管理パネルへのアクセスが必要)

class team(BaseUSER):

  pin_level = models.CharField(max_length=10)

  def get_full_name(self):
    return self.first_name

それぞれに異なるユーザーマネージャーを作成しました

学校管理者用 UserManager

class NewUserManager(BaseUserManager):

  use_in_migrations = True

  def _create_user(self, email, password, **extra_fields):
    """
    Creates and saves a User with the given email and password.
    """
    if not email:
        raise ValueError('The given email must be set')
    email = self.normalize_email(email)
    user = self.model(email=email, **extra_fields)
    user.set_password(password)
    user.save(using=self._db)
    return user

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

開発者チームのユーザー マネージャー:

class SuperManager(BaseUserManager):


  use_in_migrations = True

  def get_by_natural_key(self, email):
    return self.get(**{self.model.USERNAME_FIELD: email})

  def _create_user(self, email, password, **extra_fields):
    """
    Creates and saves a User with the given email and password.
    """
    if not email:
        raise ValueError('The given email must be set')
    email = self.normalize_email(email)
    user = self.model(email=email, **extra_fields)
    user.set_password(password)
    user.save(using=self._db)
    user.is_admin = True
    return user

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


  def create_superuser(self, email, password, **extra_fields):
    extra_fields.setdefault('is_superuser', True)
    if extra_fields.get('is_superuser') is not True:
        raise ValueError('Superuser must have is_superuser=True.')
    return self._create_user(email, password, **extra_fields)

メールログイン用の認証バックエンドも作成しました

どこかで間違っている場合、何をする必要があるか、ここで打たれたときの今後のアプローチはどうあるべきか、アドバイスしてください。

管理パネルへのログインを実装したいのですが、ログインできるはずのユーザーがタイプ 3 またはチームのユーザーです。

前もって感謝します。

4

0 に答える 0