Python 使用Django+创建帐户;Djoser[“无法创建帐户”]
我正在尝试使用Django和Djoser创建一个用户。当我尝试创建用户时,会出现错误[“无法创建帐户”。] 我正在使用从AbstractUser继承的CustomUser:Python 使用Django+创建帐户;Djoser[“无法创建帐户”],python,django,djoser,Python,Django,Djoser,我正在尝试使用Django和Djoser创建一个用户。当我尝试创建用户时,会出现错误[“无法创建帐户”。] 我正在使用从AbstractUser继承的CustomUser: class CustomUser(AbstractUser): MAN = 'man' WOMAN = 'woman' GENDER_CHOICES = ( (MAN, 'Man'), (WOMAN, 'Woman'), ) id = m
class CustomUser(AbstractUser):
MAN = 'man'
WOMAN = 'woman'
GENDER_CHOICES = (
(MAN, 'Man'),
(WOMAN, 'Woman'),
)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
email = models.EmailField(_('Email'), unique=True,db_index=True)
gender = models.CharField("Gender", max_length=30, choices=GENDER_CHOICES, blank=True, null=True)
birth_date = models.DateField("Birth date", blank=True, null=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['last_name','first_name',]
objects = CustomUserManager()
用于用户创建的自定义管理器:
class CustomUserManager(BaseUserManager):
def create_user(self, email, first_name, last_name, password, **extra_fields):
if not email:
raise ValueError(_('email is required'))
if not first_name:
raise ValueError(_('first_name is required'))
if not last_name:
raise ValueError(_('last_name is required'))
email = self.normalize_email(email)
user = self.model(email=email,first_name=first_name,last_name=last_name, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, first_name, last_name, password, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_active', True)
if extra_fields.get('is_staff') is not True:
raise ValueError(_('superuser must have is_staff=True.'))
if extra_fields.get('is_superuser') is not True:
raise ValueError(_('superuser must have is_superuser=True.'))
return self.create_user(email, first_name, last_name, password, **extra_fields)
在myurl.py中
urlpatterns = [
path('admin/', admin.site.urls),
path('auth/', include('djoser.urls')),
path('auth/', include('djoser.urls.jwt')),
]
用于创建用户的命令:
curl -X POST http://127.0.0.1:8000/auth/users/ --data 'password=xxxxxx&email=test@email.com&first_name=Charlie&last_name=Lim'
当我尝试使用te last命令创建用户时,我收到下一个错误:
["Unable to create account."]
我已经完成了所有步骤,并复习了一些教程,但我没有发现问题。这是一个愚蠢的小错误,很容易修复 AbstractUser有一个用户名字段,它是唯一的键。在我的程序中,用户名不是强制性的,当我尝试创建多个用户时,这些用户是使用参数blank=False null=False创建的,抛出错误 解决方案:使用 空白=真空=真
class CustomUser(AbstractUser):
...
username = models.CharField(
_('username'),
max_length=150,
unique=True,
blank=True,
null=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
...