2017-10-09 2 views
0

Pourquoi faire quelque chose d'aussi simple semble si compliqué dans Django? Il a commencé avec la mise en place d'un modèle d'utilisateur où l'email est employé pour se connecter, une douleur ... Maintenant j'essaye de sauver un utilisateur comme user.is_active = False mais il est sauvé comme actif. Tous les conseils sont les bienvenus ou tout autre conseil que Django a été une expérience assez pénible jusqu'à présent par rapport à Flask.Django enregistre l'utilisateur comme inactif

Remarque, j'ai également essayé @receiver(pre_save, sender=get_user_model()) ci-dessous.

views.py

... 

from .models import Story, MyUser 
from .forms import SignupForm, LoginForm 

from django.dispatch import receiver 
from django.db.models.signals import pre_save 


@receiver(pre_save, sender=MyUser) 
def set_new_user_inactive(sender, instance, **kwargs): 
    if instance._state.adding is True: 
     print("Creating Inactive User") 
     instance.is_active = False 
    else: 
     print("Updating User Record") 

... 

def signup(request): 
    if request.method == 'POST': 
     form = SignupForm(request.POST) 
     if form.is_valid(): 
      user = get_user_model() 
      user.objects.create_user(
       form.cleaned_data['username'], 
       form.cleaned_data['email'], 
       form.cleaned_data['password'], 
       ) 
     return HttpResponseRedirect(reverse('index')) 
    else: 
     form = SignupForm() 
     return render(request, 'drillapp/signup.html', {'form': form}) 

... 

models.py

from django.db import models 
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager 

... 

class MyUserManager(BaseUserManager): 
    def create_user(self, username, email, password=None): 
     if not email: 
      raise ValueError('Users must have an email address') 

     user = self.model(
      email=self.normalize_email(email), 
     ) 

     self.username = username 
     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_superuser(self, email, date_of_birth, password): 
     user = self.create_user(
      email, 
      password=password, 
     ) 
     user.is_admin = True 
     user.save(using=self._db) 
     return user 


class MyUser(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=255, 
     unique=True, 
    ) 

    objects = MyUserManager() 

    USERNAME_FIELD = 'email' 

    def get_full_name(self): 
     # The user is identified by their email address 
     return self.email 

    def get_short_name(self): 
     # The user is identified by their email address 
     return self.email 

    def __str__(self):    # __unicode__ on Python 2 
     return self.email 
+0

Je conseillerais faisant usage de la sortie [django-enregistrement -redux] (http://django-registration-redux.readthedocs.io/) – surfer190

+0

Ce n'est pas Django qui rend les choses compliquées, c'est votre approche rendre les choses compliquées. Cela nécessite une attitude positive pour faire avancer les choses. – cezar

+0

Peut-être que vous devriez vérifier cette question: https://stackoverflow.com/questions/21514354/difference-between-abstractuser-and-abstractbaseuser-in-django – cezar

Répondre

1

Pourquoi ne vous plaît pas:

class MyUser(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=255, 
     unique=True, 
    ) 
    is_active = models.BooleanField(
     default=False 
    ) 
+0

Ne serait-il pas mieux: 'is_active = models.BooleanField (default = False)'? – cezar

+0

J'ai vérifié dans le code source, et, en effet, il est 'is_active = True' dans la classe' AbstractBaseUser'. Mais dans la classe 'BaseUser', qui hérite de' AbstractBaseUser', c'est 'is_active = models.BooleanField (_ ('actif'), default = False, help_text = _ ('...'))'. Le commentaire précédent était juste une question, pas une suggestion. – cezar

+0

'is_active = False' a fonctionné pour moi. A dû redémarrer le shell. Jusque-là, il ne cessait de me montrer que 'is_active' était' True'. – Andras