Skip to main content
 首页 » 编程设计

python之为什么我无法验证通过自定义 manage.py 命令创建的 Django 用户

2024年08月16日31小虾米

这个让我完全难住了。我有一个模型扩展了 Django 中的基本用户模型,所以我正在编写自定义 manage.py 命令来创建 super 用户。它似乎工作正常,但由于某种原因,我通过此自定义命令创建的任何用户都无法通过 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 运行此命令,一切似乎都正常,并且在数据库中创建了用户。

为了演示这个问题,下面是使用 createadmin 和 shell 进行测试的输出:

创建管理员

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 View 中对服务器上的用户进行身份验证时,我得到了类似的行为。任何想法可能是什么问题?

请您参考如下方法:

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

你应该使用关键字参数:

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