django上的管理页面已损坏
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django上的管理页面已损坏相关的知识,希望对你有一定的参考价值。
我已经设置了一个带有管理页面的django项目。它在开发的前几周完美运行,暂时没有使用管理页面,当我回到它时,管理页面被破坏了。无论我做什么,它都不允许我登录。
输入用户名和PW后,管理页面总是说:
Please enter a correct username and password. Note that both fields are case-sensitive.
我检查了数据库:超级用户存在并且is_active,is_superuser和is_staff全部为True。我已经使用shell来确保密码正确。我已多次刷新,删除并重新创建数据库,以确保没有错误。我还对中间件,网址,INSTALLED_APPS等进行了双重检查,以确保它们都已正确设置。
据我所知,管理页面完美运行,但他们从不让任何人登录。
任何想法在这里发生了什么,或尝试调试的其他方法?我真的对这个bug感到困惑。
PS:如果重要的话,我使用South进行数据库迁移,使用django-social-auth进行FB登录,并将local_settings.py用于生产和开发(我已经检查了它们 - 冲突不存在。 )
此问题可能与身份验证后端有关。请检查您的设置文件以获取AUTHENTICATION_BACKENDS参数。
请尝试以下值:
AUTHENTICATION_BACKENDS = (
('django.contrib.auth.backends.ModelBackend'),
)
有关Official Django Documentation的更多信息
试试这个;在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 <your_app_name>.AuthTestCase
运行测试。如果通过,系统正在运行,可能会查看用户名和密码以确保它们可以接受。
您可以执行以下操作:
- 输入你的mysql(或其他数据库控制台)
- 使用YourDATABASE;
- SELECT *来自auth_user;
- 观看is_staff和is_superuser项目
- UPDATE auth_user SET is_staff =“1”其中username =“root”;
然后你可以再次登录!
我有同样的问题,但设置文件上的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的自定义用户
以上是关于django上的管理页面已损坏的主要内容,如果未能解决你的问题,请参考以下文章
对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段