Django管理页面损坏
我建立了一个django项目,并设置了一个管理页面。最开始的几周开发得很顺利,管理页面也正常使用,但过了一段时间没用它,回来一看,管理页面就坏了。无论我怎么尝试,都无法登录。
每次输入用户名和密码后,管理页面总是显示:
请输入正确的用户名和密码。请注意,两个字段都是区分大小写的。
我检查了数据库:超级用户存在,并且is_active、is_superuser和is_staff都为真。我还用命令行确认了密码是正确的。我多次清空、删除并重新创建数据库,以确保没有错误。我也仔细检查了中间件、网址、INSTALLED_APPS等,确保它们都设置正确。
就我所知,管理页面的功能都正常,只是从来没有人能登录。
有没有人知道这是怎么回事,或者有什么其他方法可以调试?我真的对这个问题感到困惑。
附注:如果这有帮助,我在使用South进行数据库迁移,使用django-social-auth进行Facebook登录,并且为生产和开发环境设置了不同的local_settings.py(我检查过这两个文件——问题不在这里)。
10 个回答
我也遇到过同样的问题,但设置文件中的 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。
试试这个;在 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
来运行测试。如果测试通过了,说明系统正常工作,可能需要检查一下用户名和密码,确保它们是可以接受的。
这个问题可能和身份验证的后端设置有关。请检查你的设置文件,看看里面的 AUTHENTICATION_BACKENDS 参数。
你可以试试下面这个值:
AUTHENTICATION_BACKENDS = (
('django.contrib.auth.backends.ModelBackend'),
)
想了解更多信息,可以查看 官方的 Django 文档