J'essaie d'utiliser l'email pour l'authenication dans Django. En d'autres termes, j'étend l'authentification django. J'ai suivi toutes les étapes et croyez-moi cela a fonctionné avant. Maintenant, il a cessé de fonctionner.Erreur d'authentification de l'utilisateur client: AttributeError: le gestionnaire n'est pas disponible; 'auth.User' a été échangé pour 'user_management.CustomUser'
c'est model.py
from django.db import models from django.contrib.auth.models import AbstractBaseUser,BaseUserManager,PermissionsMixin from django.core.mail import send_mail from django.utils.translation import ugettext_lazy as _ #now=time.strftime('%Y-%M-%D %H:%m:%S.%u%Z') import datetime from datetime import timedelta from django.utils import timezone from django.utils.timezone import now tomorrow = timezone.now() + timedelta(days=1) current_time= timezone.now() class CustomUserManager(BaseUserManager): def _create_user(self,email,password,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, is_staff=is_staff, is_active = True, is_superuser =is_superuser, last_login=timezone.now(), date_joined=timezone.now(), **extra_fields) user.set_password(password) user.save(using=self._db) return user def create_user(self, email,password=None,**extra_fields): return self._create_user(email,password,False,False,**extra_fields) def create_superuser(self, email,password,**extra_fields): return self._create_user(email,password,True,True,**extra_fields) class CustomUser(AbstractBaseUser,PermissionsMixin): username =models.CharField(max_length =255, unique = True,blank = True,null= True) email =models.EmailField(blank=False, unique =True) date_joined = models.DateTimeField(_('date joined'), default=now) is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) USERNAME_FIELD ='email' REQUIRED_FIELD =['user_name','date_joined'] objects=CustomUserManager() class Meta: verbose_name=_('user') verbose_name_plural=_('users') def get_absolute_url(self): return "/user/%s" %urlquote(self.email) def get_full_name(self): a=UserProfile.objects.get(email_id=self.id) self.first_name=a.first_name self.last_name= a.last_name if not self.first_name and not self.last_name: full_name =self.email else: full_name = '%s %s' %(self.first_name,self.last_name) return full_name.strip() def get_short_name(self): self.first_name='a' return self.first_name def email_user(self,subject,message,from_email=None): send_mail(subject,message,from_email,[self.email]) #code class UserProfile(models.Model): email = models.OneToOneField(CustomUser,unique =True,primary_key=True) first_name=models.CharField(max_length =256, blank = True) last_name=models.CharField(max_length =256, blank = True) activation_key = models.CharField(max_length=40,blank=True) gender = models.CharField(max_length=6, null=True,blank=True,choices=( ('male', 'Male'), ('female', 'Female'),)) date_of_birth=models.DateField(null=True,blank=True) key_expires = models.DateTimeField(default=tomorrow) def __str__(self): full_name = '%s %s' %(self.first_name,self.last_name) return full_name class Meta: verbose_name=u'User profile' verbose_name_plural=u'User profiles' models.OneToOneField(CustomUser, related_name='Userprofile') class UserAddress(models.Model): address_contact=models.CharField(max_length=300,blank=False) address_line1=models.CharField(max_length=300,blank=False) address_line2=models.CharField(max_length=300,blank=True) land_mark=models.CharField(max_length=100,blank=False) city=models.CharField(max_length=140,blank=False) state=models.CharField(max_length=100,blank=False) pin_code = models.BigIntegerField(blank=False) mobile_no=models.CharField(max_length=13,blank=True) last_shipped_flag=models.BooleanField(default=False) is_active_flag=models.BooleanField(default=True) is_primary=models.BooleanField(default=False) creation_date=models.DateTimeField(auto_now_add=True,editable=False,blank=False,null=True) updation_date=models.DateTimeField(auto_now=True,editable=False,blank=False,null=True) email=models.ForeignKey(UserProfile) def __str__(self): return self.address_contact class Meta: verbose_name=u'User Address' verbose_name_plural=u'User Addresses'
c'est manager.py
from models import CustomUser class CustomUserAuth(object): def authenticate(self, username = None, password =None): try: user =CustomUser.objects.get(email=username) if user.check_password(password): return user except CustomUser.DoesNotExist: return None def get_user(self, user_id): try: user=CustomUser.objects.get(pk=user_id) if user.is_active: return user return None except CustomUser.DoesNotExist: return None
J'ai inclus les lignes suivantes dans mon fichier settings.py
AUTH_USER_MODEL = 'user_management.CustomUser' AUTHENTICATION_BACKENDS = ('user_management.manager.CustomUserAuth',)
maintenant pour le dépannage J'ai couru le shell python manage.py et j'importe le formulaire
CustomUserCreationForm et lui a transmis les données et a tenté de les enregistrer. Je obtenu la même erreur
trace d'erreur retourTraceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/forms.py", line 110, in save user = super(UserCreationForm, self).save(commit=False) File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 459, in save if self.errors: File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py", line 175, in errors self.full_clean() File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py", line 386, in full_clean self._post_clean() File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 413, in _post_clean self.instance.full_clean(exclude=exclude, validate_unique=False) File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 1235, in full_clean self.clean() File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/models.py", line 349, in clean self.email = self.__class__.objects.normalize_email(self.email) File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 198, in __get__ cls._meta.swapped, AttributeError: Manager isn't available; 'auth.User' has been swapped for 'user_management.CustomUser'
Il y a beaucoup d'informations à propos de l'erreur suivante. J'ai essayé de google mais j'ai trouvé un bug dans django 1.5 pour lequel le ticket est fermé. Peu de gens intelligents ont dit que j'ai utilisé get_user_model mais ces informations sont incomplètes.
S'il vous plaît aider
Je l'ai corrigé moi-même. Je l'ai changé get_user_model de CustomUser dans forms.py pour CustomUserCreationForm Classe Meta: model = get_user_model() – user3698694