Kendi
AbstractUser
ve
BaseUserManager
sınıflar yazmak gerekir
. Neyse it's pretty simple, uygulamanızın modellere böyle bir şey ekleyin:
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
Sonraki, bu model sizin projenin yeni User
sınıf olduğunu Django söyle. senin settings.py
dosyaya aşağıdakileri ekleyin:
AUTH_USER_MODEL = 'apiapp.Account'
Bu işlem tamamlandıktan sonra, sadece göç: Yeni kullanıcılar Bu noktadan itibaren
python manage.py makemigrations
python manage.py migrate
bu yeni modeli tarafından temsil edilecek (eğer geçişleri işlemek zorunda kalacak el ile),
self.request.user
'u kullanabileceğiniz her yerde dahil!
Cevabınız için teşekkür ederiz. Aşağıdaki allauth ayarlarını değiştirerek üzerinde benim AbstractUser ve Yönetici sınıfları yazma avantajı nedir: 'ACCOUNT_USER_MODEL_USERNAME_FIELD = Yok ACCOUNT_EMAIL_REQUIRED = Doğru ACCOUNT_USERNAME_REQUIRED = False – RobChooses
Aslında tamamen kafam karıştı' = 'email' ACCOUNT_AUTHENTICATION_METHOD. Bu allauth ayarlarında, ACCOUNT_USER_MODEL_USERNAME_FIELD = Yok, vb., Django yöneticisinde, Kullanıcı Ekle altında, kullanıcı adının hala gerekli olduğunu söylüyor. – RobChooses
Özel bir AbstractUser kullanmanın en mantıklı olduğunu düşünüyorum çünkü ilişkilendirme için "auth.model.User" ve kullanıcı profili bilgilerini izlemek için yazdığınız diğer "Model" lerden dolayı uğraşmak zorunda değilsiniz. Gerçi allauth'la konuşamam. – IAmKale