Как создать пользователя в Django?
Я пытаюсь создать нового пользователя в проекте Django по следующему коду, но выделенная строка вызывает исключение.
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))
Любая помощь?
Ответы
Ответ 1
Правильный способ создания пользователя в Django - использовать функцию create_user. Это будет обрабатывать хэширование пароля и т.д.
from django.contrib.auth.models import User
user = User.objects.create_user(username='john',
email='[email protected]',
password='glass onion')
Ответ 2
Вы подтвердили, что передаете фактические значения, а не 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')
Ответ 3
Создание массового пользователя с помощью set_password
Я создаю несколько тестовых пользователей, bulk_create
работает намного быстрее, но мы не можем использовать create_user
с ним.
set_password
- это еще один способ генерации хэшированных паролей:
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()))
Вопрос о хэшировании паролей: Как использовать Bcrypt для шифрования паролей в Django
Протестировано в Django 1.9.