2011-07-19 124 views
13

首先,我是一个新手。我正在运行Ubuntu 11.04它附带Python 2.7所以我安装了Python2.5在不同的目录中运行Django-Non-Rel在Google App Engine上。 我做了留言板教程,现在我试图添加管理员访问,但是当我输入正确的用户名:密码Django认为它不正确。 在部署到GAE时甚至无法工作。如果你知道请戳我正确的方向。无法登录到Django /管理界面

我加入:

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

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

EDIT
我还添加

URL(R '^管理员/',包括(admin.site.urls)),

到子项目目录中的urls.py。
EOEDIT

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

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

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

EDIT2

感谢大家的努力帮助可惜无论是提供的解决方案的解决了这一问题。我决定先自己学习Django,然后可能切换到GAE Django-nonrel,所以这个问题不再相关。我还应该选择一个答案给别人点点数吗?

+0

我有同样的问题,我相信BoGs的答案解决了这个问题。 – alvas

回答

3

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

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

4

在urls.py取消注释:

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

而且应该让你很好的比赛:)

PS。不要忘记运行./manage.py syncdb,它会要求设置一个管理员用户。

+0

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

5

假设您具有正确的用户名和密码,唯一会呈现与失败登录相同行为的是针对相关用户的is_staff=False

进入您的数据库并检查auth_user表。确保is_staff被设置为TRUE您用于登录的用户。

0

我有同样的问题,并不明白为什么我无法登录,因为所有的设置都是正确的。但是,我将它追溯到Django,为我提供了一个包含首字母大写字母的超级用户名,但实际上将名称保存为完全小写!

我自然使用超大用户名和大写字母(由Django提供),认证失败。当检查数据表来检查'is_staff'等我发现了错误。我知道我没有弄错,因为我重复了几次安装过程,并记下了超级用户凭据以确保案例等详细信息。

因此,接受Django提供的默认名称时,道德是要小心!它在于!

20

django-nonrel有一些限制。

要创建一个超级用户:

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

    python manage.py createsuperuser 
    
  • 再次运行Web服务器

    python manage.py runserver 
    
+2

这就是我所做的,但它仍然不会让我登录到管理界面。 – nana

+0

像一个魅力工作。甚至没有停止/启动网络服务器。 :-) – vidstige

1

如果你是一个白痴,像我一样,你可能会试图用你的电子邮件而不是你的用户名登录。

我想我是这么做的,因为当创建超级用户时,我记得输入电子邮件而不是用户名(因为django为用户提供了一个用户名而不必输入),也许是通常使用电子邮件作为用户名的惯例。男人我觉得愚蠢哈哈。

1

我遇到了和你一样的情况。我发现我切换认证后端

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 

你会发现实际上用户名被强制交替'email'。所以你必须用电子邮件帐户登录你的页面。 如果像

用户名:[email protected]

密码:密码

然后,它的工作原理。 希望这对大家有帮助。

0

这并不难解决。所有的 首先确保让你的默认设置

(DEBUG=TRUE,ALLOWED_HOST=[ ]) 

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

获取到您的网站文件夹中(使用命令提示符),然后键入以下命令:

$ python manage.py createsuperuser 
name: 
email:e.g [email protected] 
password: 

返回到浏览器和运行服务器。设置用户名(不是电子邮件),以及您之前创建的密码。这次肯定会很好地工作。