Как создавать пользователей в Django?
Я пытаюсь использовать модель пользователя Django, но не могу создать нового пользователя. Я уже выполнил команды python manage.py makemigrations
и python manage.py migrate
. Если я пытаюсь запустить команды снова, я получаю сообщение "Изменения не обнаружены"
Я смог создать суперпользователя для Django admin, и я могу использовать этого пользователя для входа в мое веб-приложение, используя представления, которые я создал, но если я пытаюсь создать пользователя, он не появляется в Django admin.
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
pass
views.py для создания пользователя
def register(request):
if request.method == "POST":
username = request.POST["username"]
password = request.POST["password"]
confirm = request.POST["confirm"]
if password != confirm:
return render(request, "capstone/register.html",{
"error_message": "Your passwords must match."
})
try:
user = User.objects.create_user(username, password)
user.save()
except IntegrityError:
return render(request, "capstone/register.html",{
"error_message": "You will need to pick another username."
})
login(request, user)
return HttpResponseRedirect(reverse("index"))
else:
return render(request, "capstone/register.html")
Я также добавил AUTH_USER_MODEL = 'capstone.User'
в setup.py моего проекта.
Я также просмотрел эту документацию, но это не помогло.
Кто-нибудь знает, как решить эту проблему?
При использовании функции create_user необходимо сначала создать функцию create_user в models.py
models.py
from django.db import models
from django.contrib.auth.models import (BaseUserManager, AbstractBaseUser)
class UserManager(BaseUserManager):
def create_user(self, email, password=None):
"""
Creates and saves a User with the given email and password.
"""
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_staffuser(self, email, password):
"""
Creates and saves a staff user with the given email and password.
"""
user = self.create_user(
email,
password=password,
)
user.staff = True
user.save(using=self._db)
return user
def create_superuser(self, email, password):
"""
Creates and saves a superuser with the given email and password.
"""
user = self.create_user(
email,
password=password,
)
user.staff = True
user.admin = True
user.save(using=self._db)
return user
class User(AbstractBaseUser):
pass
objects = UserManager()
settings.py
AUTH_USER_MODEL = 'accounts.User'
Для получения дополнительной информации: https://www.codingforentrepreneurs.com/blog/how-to-create-a-custom-django-user-model/
class User(AbstractBaseUser, PermissionsMixin):
"""
Custom User model with email as the primary identifier field.
"""
email = models.EmailField(_('email address'),max_length=255,unique=True,)
username = models.CharField(max_length=15,blank=True,null=True)
is_staff = models.BooleanField(_('staff status'),default=False,help_text=_('Designates whether the user can log into this admin site.'),)
is_active = models.BooleanField(_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
uuid_txt = models.CharField(
_('uuid text'),
max_length=36,
unique=True,
help_text=_(
'UUID representing this user. '
'Helps identify this user without their user ID and can be shared
publicly.'
),
error_messages={
'unique': _('A user with that uuid_txt already exists.'),
},
)
deleted = models.DateTimeField(default=None,blank=True, null=True)
is_deleted = models.BooleanField(default=False)
objects = UserManager()
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
Другой ответ не решил мою проблему, поэтому я последовал этому учебнику, который подробно объясняет, как сделать пользовательскую модель пользователя.