简体   繁体   English

如何在 Django 中创建用户?

[英]How to create users in Django?

I am trying to use Django's user model, but when I cannot create a new user.我正在尝试使用 Django 的用户 model,但是当我无法创建新用户时。 I already ran python manage.py makemigrations and python manage.py migrate .我已经运行了python manage.py makemigrationspython manage.py migrate If I try to run the commands again, I get a "No Changes Detected" message.如果我尝试再次运行这些命令,我会收到“未检测到更改”消息。

I was able to create a superuser for Django admin, and I can use that user to log into my web application using the views that I created, but if I try to create a user, it does not appear in Django admin.我能够为 Django 管理员创建一个超级用户,并且我可以使用该用户使用我创建的视图登录到我的 web 应用程序,但是如果我尝试创建一个用户,它不会出现在 ZEF0F93C83E374876A61DA0Dadmin.Dadmin 中

models.py模型.py

from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.
class User(AbstractUser):
    pass

views.py for creating the user views.py 用于创建用户

from django.db import IntegrityError
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User

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")

I have also added AUTH_USER_MODEL = 'capstone.User' to my project's setting.py.我还将AUTH_USER_MODEL = 'capstone.User'添加到我的项目的 setting.py 中。
I have also looked at this documentation , but it did not help.我也看过 这个文档,但没有帮助。

Does anyone know how to fix this problem?有谁知道如何解决这个问题?

settings.py设置.py

"""
Django settings for finalproject project.

Generated by 'django-admin startproject' using Django 3.2.5.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-fc=64ht^dmr#=ig25b=37o5ux#-s+%lg1+3xc4&y1byug4i6uf'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'capstone',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'finalproject.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'finalproject.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'

# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

When you have used the create_user function, you have to first create create_user function in models.py当您使用了 create_user function 后,您必须首先在 models.py 中创建 create_user function

models.py模型.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设置.py

AUTH_USER_MODEL = 'accounts.User'

For more Information: https://www.codingforentrepreneurs.com/blog/how-to-create-a-custom-django-user-model/欲了解更多信息: 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 = []

The other answer did not fix my problem, so I followed this tutorial , which thoroughly explains how to make a custom user model.另一个答案没有解决我的问题,所以我按照这个教程,它彻底解释了如何制作自定义用户 model。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM