0

Sadece kullanıcı kaydı için bir e-postaya sahip olmak ve kullanıcı adını django-rest-auth çerçevesinde bir gereksinim haline getirmemek için en iyi (en kolay?) Yol nedir? ?Django-rest-auth içinde gerekli e-posta için en iyi yöntem

Örneğin yeni bir Kullanıcı Serileştirici yazmam gerekecek mi? Bunun yerine, bu gereksinimi kapatmak için Doğru veya Yanlış olarak ayarlayabileceğim bir bayrak ayarı var mı?

Teşekkür

cevap

0
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!

+0

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

+0

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

+0

Ö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

İlgili konular