0
什麼是最好的(最簡單?)的方式,使之成爲需要有一個電子郵件只爲用戶註冊,而不是使用戶名要求在Django的REST的身份驗證框架?最佳實踐
例如,我需要編寫一個新的用戶序列化程序嗎?是否有一個標誌設置,我可以將True或False設置爲關閉或取決於此要求?
感謝
什麼是最好的(最簡單?)的方式,使之成爲需要有一個電子郵件只爲用戶註冊,而不是使用戶名要求在Django的REST的身份驗證框架?最佳實踐
例如,我需要編寫一個新的用戶序列化程序嗎?是否有一個標誌設置,我可以將True或False設置爲關閉或取決於此要求?
感謝
你需要編寫自己的AbstractUser
和BaseUserManager
類。幸運的it's pretty simple,加入這樣的事情你的應用程序的模型:
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models
class Account(AbstractBaseUser):
email = models.EmailField(unique=True)
username = models.CharField(max_length=40, unique=True, blank=True)
first_name = models.CharField(max_length=40, blank=True)
last_name = models.CharField(max_length=40, blank=True)
is_admin = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = AccountManager()
# This tells Django that this field is absolutely important...
USERNAME_FIELD = 'email'
# ...and username is now optional because it doesn't show up here!
REQUIRED_FIELDS = []
def __unicode__(self):
return self.email
def get_full_name(self):
return ' '.join([self.first_name, self.last_name])
def get_short_name(self):
return self.first_name
class AccountManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError('User must provide an e-mail address')
account = self.model(
email=self.normalize_email(email)
)
account.set_password(password)
account.save()
return account
def create_superuser(self, email, password=None):
account = self.create_user(email, password)
account.is_admin = True
account.save()
return account
接下來,告訴Django,該模型是你項目的新User
類。以下添加到您的settings.py
文件:
AUTH_USER_MODEL = 'apiapp.Account'
一旦這樣做了,只是遷移:
python manage.py makemigrations
python manage.py migrate
從對新用戶這一點將會通過這個新的模型來表示(你必須處理遷移手動),包括您可能使用的任何地方self.request.user
!
感謝您的回答。什麼是對不斷變化的以下allauth設置寫我AbstractUser和管理類的優勢: 'ACCOUNT_USER_MODEL_USERNAME_FIELD =無 ACCOUNT_EMAIL_REQUIRED =真 ACCOUNT_USERNAME_REQUIRED =假 ACCOUNT_AUTHENTICATION_METHOD =「郵件」' – RobChooses
其實,我完全糊塗了。使用這些allauth設置,ACCOUNT_USER_MODEL_USERNAME_FIELD = None等,在Django管理員的「添加用戶」下,它表示仍然需要用戶名。 – RobChooses
我認爲使用自定義AbstractUser是最有意義的,因爲您不必爲了跟蹤用戶配置文件信息而調用關係,因爲'auth.model.User'和任何其他'Model'。儘管我不能說'阿拉思特'。 – IAmKale