为什么我不能验证从自定义manage.py命令创建的Django用户?

时间:2018-03-30 16:58:43

标签: python django django-authentication django-users django-manage.py

这个让我完全难过。我有一个扩展Django基本用户模型的模型,所以我正在编写一个自定义manage.py命令来创建超级用户。它似乎工作正常,但由于某种原因,我通过此自定义命令创建的任何用户都无法通过Django进行身份验证。当我检查数据库时,确实正在创建用户并且所有信息都是正确的。

这是我在名为createadmin.py的文件中的自定义命令的代码(我省略了与问题无关的代码位):

from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User

class Command(BaseCommand):
    help = 'Creates a Django admin user'

    def handle(self, *args, **options):
        username = raw_input('Admin username: ')
        password = raw_input('Admin password: ')

        try:
            new_user = User.objects.create_user(username, password, '')
            new_user.is_superuser = True
            new_user.is_staff = True
            new_user.save()
            self.stdout.write('Admin created successfully')
        except:
            self.stdout.write('Sorry, there was a problem creating a new user in the database.')

现在,如果我使用python manage.py createadmin运行此命令,一切似乎都有效,并且用户是在数据库中创建的。

为了演示此问题,以下是使用createadminshell进行测试的结果:

createadmin

Admin username: testadmin
Admin password: admin
Admin created successfully

>>> from django.contrib.auth.models import User
>>> from django.contrib.auth import authenticate
>>> user = User.objects.get(username='testadmin')
>>> user.is_superuser
True
>>> user.is_active
True
>>> user.is_staff
True
>>> authenticate(username='testadmin', password='admin') is None
True

正如您所看到的,用户存在,但我无法对其进行身份验证。当我尝试在login视图中验证服务器上的用户时,我得到类似的行为。任何想法可能是什么问题?

1 个答案:

答案 0 :(得分:2)

create_user的第二个位置参数是电子邮件,而不是密码。

您应该使用关键字参数:

new_user = User.objects.create_user(username, password=password)