无法登录Django /admin界面

19

首先声明,我是一个新手。我的操作系统是Ubuntu 11.04,自带Python 2.7,但为了在Google App Engine上运行Django-Non-Rel,我在另一个目录下安装了Python 2.5

我已经完成了Guestbook教程,现在正在尝试添加管理员权限,但是当我输入正确的用户名和密码时,Django却认为它不正确。 即使在部署到GAE后也无法正常工作。如果您知道原因,请指点一下我。

我添加了:

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

INSTALLED_APPS = (
    ...
    'django.contrib.admin',
    ....
)

编辑
我还添加了:

url(r'^admin/', include(admin.site.urls)),

到子项目目录下的 urls.py 文件中。
结束编辑

然后我创建了超级用户并同步了数据库:

> python2.5 xxx-xxx-guestbook/manage.py createsuperuser python2.5
> xxx-xxx-guestbook/manage.py syncdb

然后运行应用程序,但无法登录。我创建了多个不同的超级用户,结果总是相同。

编辑2

感谢大家的帮助,但不幸的是,提供的解决方案都没有解决问题。我决定先学习Django本身,然后可能再切换到GAE Django-nonrel,所以这个问题不再相关。我还需要选择一个答案来给某人一些积分吗?


我遇到了相同的问题,我相信BoGs的答案解决了这个问题。 - alvas
9个回答

25

在django-nonrel中存在某种限制。

要创建超级用户:

  • 停止本地Web服务器
  • 创建超级用户

python manage.py createsuperuser
再次运行网络服务器。
python manage.py runserver

6
我已经这样做了,但仍无法登录管理界面。 - nana
1
运行得非常好,甚至不需要停止/启动 Web 服务器。 :-) - vidstige
1
谢谢你,我正在使用Django Oscar,他们的文档缺少这一部分,甚至没有提到登录,所以谢谢你。 - Sebastian

8
假设您已经有了正确的用户名和密码,唯一表现为登录失败的原因是在相关用户中 is_staff=False
请进入您的数据库并检查 auth_user 表。确保您要登录的用户的 is_staff 属性设置为 TRUE

如果使用自定义用户模型,则似乎需要这个。 - Josh

5
我曾经遇到了和你相同的情况。我发现我将身份验证后端切换为

someproject.backends.EmailCheckmodelBackend

,并在 settings.py 中添加了一行:

AUTHENTICATION_BACKENDS = ('someproject.backends.EmailCheckModelBackend',)

后端看起来像这样:
class EmailCheckModelBackend(ModelBackend):
def authenticate(self, username = None, password = None, is_staff = None):
    try:
        user = User.objects.get(email = username)
        if user.check_password(password):
            if is_staff is not None:
                if user.is_staff == is_staff:
                    return user
                else:
                    return None
            return user

    except User.DoesNotExist:
        return None

实际上,用户名被强制更改为'电子邮件'。 因此,您必须使用电子邮件帐户登录页面。

如果像这样

用户名:someone@somewhere.com

密码:password

那么它就可以工作了。 希望这对大家有所帮助。


2
谢谢,这正是我在使用DRF时遇到的问题。我已经在settings.py中更新了AUTHENTICATION_BACKENDS以使用DRF身份验证后端。我通过将'django.contrib.auth.backends.ModelBackend'添加到AUTHENTICATION_BACKENDS列表中来解决了这个问题。 - Sameer Kumar
1
@SameerKumar 没问题。那是我5年前回答的问题,现在仍然有效。哈哈 - dotslash

5

在 urls.py 中取消注释:

# Uncomment the next line to enable the admin:
**# url(r'^admin/', include(admin.site.urls)),**

这应该能让你在比赛中表现出色 :)

另外,别忘了运行./manage.py syncdb命令,并设置管理员用户。


谢谢,但我已经做了,只是忘记提到了。我无法取消注释,因为它不在那里,所以我只是在子项目目录的inurls.py中添加了它。 - nana

5

不太确定,但是 syncdb 可能会删除您刚创建的超级用户。请在 syncdb 提示您创建超级用户时尝试创建。

否则,请查看 ./manage.py shell 中的用户模型。检查 User.objects.all()[0].is_superuser


5

如果你和我一样是个傻瓜,可能会尝试使用电子邮件地址而不是用户名进行登录。

我认为我这样做是因为在创建超级用户时,我记得输入了电子邮件地址而不是用户名(因为Django提供了不需要键入用户名的选项),也许通常的惯例是使用电子邮件作为用户名。 哎呀,我感到很愚蠢。


Django在创建超级用户时不要求用户名,但在登录管理员时需要电子邮件吗? - Josh

0
在我的情况下,是因为我设置了一个Redis服务器。

1
你的回答可以通过提供更多支持性的信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

0

我曾经遇到过同样的问题,但是所有设置都是正确的,所以我不明白为什么无法登录。后来我发现这是因为Django给我提供了一个超级用户名称,其中包含一个大写字母,但实际上将名称完全转换为小写!

我自然而然地使用了Django提供的带有大写字母的超级用户名称,但身份验证失败了。当检查数据表以检查“is_staff”等时,我发现了错误。我知道我没有犯错,因为我重复了设置过程几次,并注意到超级用户凭据以确保详细信息如大小写。

因此,教训是在接受Django提供的默认名称时要小心!它是虚假的!


-1

修复并不难。 首先确保允许您的默认设置。

(DEBUG=TRUE,ALLOWED_HOST=[ ])

在您的网站文件夹的设置文件中。

进入您的网站文件夹(使用命令提示符),并键入以下命令:

$ python manage.py createsuperuser
name:
email:e.g fulluser@admin.com
password:

返回浏览器并运行服务器。设置用户名(而非电子邮件)以及您之前创建的密码。这次一定会正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接