Я пытаюсь создать нового пользователя в проекте 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))
Любая помощь?
Ответы:
Правильный способ создать пользователя в Django - использовать функцию create_user. Это будет обрабатывать хеширование пароля и т. Д.
from django.contrib.auth.models import User user = User.objects.create_user(username='john', email='jlennon@beatles.com', password='glass onion')
источник
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
РЕДАКТИРОВАТЬ: это работаетDJANGO_SETTINGS_MODULE=app.settings.dev python manage.py shell < register-user.py
from django.contrib.auth import get_user_model
иuser = get_user_model().objects.create_user(...
Вы подтвердили, что вы передаете фактические значения, а не
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')
источник
Массовое создание пользователей с помощью
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.
источник
Если вы создаете пользователя в обычном режиме, вы не сможете войти в систему, поскольку метод создания пароля может быть другим. Для этого можно использовать форму регистрации по умолчанию.
from django.contrib.auth.forms import UserCreationForm
Вы также можете расширить это
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' ]
Тогда в виду используйте этот класс
class UserCreate(CreateView): form_class = UserForm template_name = 'registration/signup.html' success_url = reverse_lazy('list') def form_valid(self, form): user = form.save()
источник