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?
Réponses:
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='[email protected]', password='glass onion')
la source
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
EDIT: cela fonctionneDJANGO_SETTINGS_MODULE=app.settings.dev python manage.py shell < register-user.py
from django.contrib.auth import get_user_model
etuser = get_user_model().objects.create_user(...
Avez-vous confirmé que vous transmettez des 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')
la source
Création d'utilisateurs en masse avec
set_password
Si vous créez plusieurs utilisateurs de test,
bulk_create
c'est beaucoup plus rapide, mais nous ne pouvons pas l'utilisercreate_user
avec.set_password
est une autre façon de générer les mots de passe hachés:def users_iterator(): for i in range(nusers): is_superuser = (i == 0) user = User( first_name='First' + str(i), is_staff=is_superuser, is_superuser=is_superuser, last_name='Last' + str(i), username='user' + str(i), ) user.set_password('asdfqwer') yield user class Command(BaseCommand): def handle(self, **options): User.objects.bulk_create(iter(users_iterator()))
Question spécifique sur le hachage de mot de passe: Comment utiliser Bcrypt pour crypter les mots de passe dans Django
Testé dans Django 1.9.
la source
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 cela
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' ]
Alors 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()
la source