124 votes

Comment créer un utilisateur dans Django ?

J'essaie de créer un nouvel utilisateur dans un projet Django par le code suivant, mais la ligne en surbrillance déclenche une exception.

def createUser(request):
    userName = request.REQUEST.get('username', None)
    userPass = request.REQUEST.get('password', None)
    userMail = request.REQUEST.get('email', None)

    # TODO: check if already existed

    **user = User.objects.create_user(userName, userMail, userPass)**
    user.save()

    return render_to_response('home.html', context_instance=RequestContext(request))

De l'aide ?

260voto

keithhackbarth Points 180

La bonne façon de créer un utilisateur dans Django est d'utiliser la fonction create_user. Cela gèrera le hachage du mot de passe, etc.

from django.contrib.auth.models import User
user = User.objects.create_user(username='john',
                                 email='jlennon@beatles.com',
                                 password='glass onion')

24voto

Burhan Khalid Points 50578

Avez-vous confirmé que vous passez les valeurs réelles et non None ?

from django.shortcuts import render

def createUser(request):
    userName = request.REQUEST.get('username', None)
    userPass = request.REQUEST.get('password', None)
    userMail = request.REQUEST.get('email', None)

    # TODO: check if already existed
    if userName and userPass and userMail:
       u,created = User.objects.get_or_create(userName, userMail)
       if created:
          # user was created
          # set the password here
       else:
          # user was retrieved
    else:
       # request was empty

    return render(request,'home.html')

6voto

Nids Barthwal Points 1393

Si vous créez un utilisateur normalement, vous ne pourrez pas vous connecter car la méthode de création de mot de passe peut être différente. Vous pouvez utiliser le formulaire d'inscription par défaut pour ce

from django.contrib.auth.forms import UserCreationForm

Vous pouvez étendre cela aussi

from django.contrib.auth.forms import UserCreationForm

class UserForm(UserCreationForm):
    mobile = forms.CharField(max_length=15, min_length=10)
    email = forms.EmailField(required=True)
    class Meta:
        model = User
        fields = ['username', 'password', 'first_name', 'last_name', 'email', 'mobile' ]

Ensuite, en vue, utilisez cette classe

class UserCreate(CreateView):
    form_class = UserForm
    template_name = 'registration/signup.html'
    success_url = reverse_lazy('list')

    def form_valid(self, form):
        user = form.save()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X