Django管理页面损坏

27 投票
10 回答
33493 浏览
提问于 2025-04-17 10:08

我建立了一个django项目,并设置了一个管理页面。最开始的几周开发得很顺利,管理页面也正常使用,但过了一段时间没用它,回来一看,管理页面就坏了。无论我怎么尝试,都无法登录。

每次输入用户名和密码后,管理页面总是显示:

请输入正确的用户名和密码。请注意,两个字段都是区分大小写的。

我检查了数据库:超级用户存在,并且is_active、is_superuser和is_staff都为真。我还用命令行确认了密码是正确的。我多次清空、删除并重新创建数据库,以确保没有错误。我也仔细检查了中间件、网址、INSTALLED_APPS等,确保它们都设置正确。

就我所知,管理页面的功能都正常,只是从来没有人能登录。

有没有人知道这是怎么回事,或者有什么其他方法可以调试?我真的对这个问题感到困惑。

附注:如果这有帮助,我在使用South进行数据库迁移,使用django-social-auth进行Facebook登录,并且为生产和开发环境设置了不同的local_settings.py(我检查过这两个文件——问题不在这里)。

10 个回答

2

我也遇到过同样的问题,但设置文件中的 AUTHENTICATION_BACKENDS 这个选项对我来说并不是问题。因为我在使用 Django Rest Framework 的时候,不小心修改了密码,而没有调用 set_password 方法,这样就绕过了密码的加密处理。所以才导致登录时显示无效。

我通过运行一个简单的测试来发现了这个问题,测试用户创建的过程,测试代码类似于:

from django.test import TestCase

from django.contrib import auth
from .models import *

class AuthTestCase(TestCase):
    def setUp(self):
        self.u = UserProfile.objects.create_user('test@dom.com', 'iamtest', 'pass')
        self.u.is_staff = True
        self.u.is_superuser = True
        self.u.is_active = True
        self.u.save()

    def testLogin(self):
        self.client.login(username='test@dom.com', password='pass')

另外值得一提的是,我创建了一个自定义用户,叫做 UserProfile。

3

试试这个;在 tests.py 文件里:

from django.contrib import auth

class AuthTestCase(TestCase):
    def setUp(self):
        self.u = User.objects.create_user('test@dom.com', 'test@dom.com', 'pass')
        self.u.is_staff = True
        self.u.is_superuser = True
        self.u.is_active = True
        self.u.save()

    def testLogin(self):
        self.client.login(username='test@dom.com', password='pass')

然后用 python manage.py test <你的应用名称>.AuthTestCase 来运行测试。如果测试通过了,说明系统正常工作,可能需要检查一下用户名和密码,确保它们是可以接受的。

34

这个问题可能和身份验证的后端设置有关。请检查你的设置文件,看看里面的 AUTHENTICATION_BACKENDS 参数。

你可以试试下面这个值:

AUTHENTICATION_BACKENDS = (
    ('django.contrib.auth.backends.ModelBackend'),
)

想了解更多信息,可以查看 官方的 Django 文档

撰写回答