2013-03-02 28 views
0

我知道这个问题之前已经问过几次,但大部分问题都是很久以前问过的,旧的答案对我来说并不适用。无法用有效的用户名和密码登录到django管理员视图

我有一个基于django-nonrel的应用程序,它使用dbindexer作为后端并部署在GAE上。我能够查看我的应用程序的主页,不需要登录。
但是,当我尝试登录到管理视图,它提供了“错误的用户名/密码”

在我的本地开发服务器,如果我使用“manage.py runserver命令”,然后我才能够登录管理页面上。但是,如果我通过GAE启动程序运行我的应用程序,那么我无法登录。

我可以收集GAE启动程序使用“manage.py runserver”中的不同django。 那么,我怎样才能使GAE(在启动器以及部署服务器上)使用django-nonrel?

其他详情:

app.yaml does NOT include "django" library. 

settings.py 

DATABASES['native'] = DATABASES['default'] 
DATABASES['default'] = {'ENGINE': 'dbindexer', 'TARGET': 'native'} 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    # Uncomment the next line for simple clickjacking protection: 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 

    'djangotoolbox', 
    'autoload', 
    'dbindexer', 

    # Uncomment the next line to enable the admin: 
    'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    'django.contrib.admindocs', 

    'djangoappengine', 
    'testapp', 
) 

urls.py 

from django.conf.urls.defaults import * 
from django.contrib import admin 
admin.autodiscover() 

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

更新1 ::
作为@dragonx指出的那样,我需要运行 python manage.py remote createsuperuser和创建用户。

在本地服务器上,运行'manage.py syncdb'时,它会填充数据库并初始化数据,其中还包括创建超级用户。我在'fixtures'目录中使用了'initial_data.yaml',并通过syncdb命令自动读取。
那么,有什么办法可以在服务器端运行“syncdb”吗?不知怎的,我认为这是在部署时自动发生,就像'manage.py runserver'发生在我自己身上,我不需要手动运行应用程序。如果我运行manage.py remote syncdb,就脱口而出以下错误:

google.appengine.api.datastore_errors.NeedIndexError: no matching index found. 
<<ed>>some stack trace<<ed>> 
The suggested index for this query is: 
- kind: django_content_type 
    properties: 
    - name: app_label 
    - name: name 

更新2:
而不是使用appcfg.py update site命令,如果你使用python manage.py deploy从您的应用程序目录,它运行远程服务器上的灯具没有。知道什么在做什么
manage.py remote loaddata initdata.yaml也可以用来初始化远程数据库。

但即使在这之后,我仍然没有看到管理界面中加载的灯具数据,也就是说它似乎没有初始化数据库,或者管理视图可能被严重破坏。但我保存另一个问题〜

回答

2

当你运行python manage.py runserver它启动本地机器上的本地开发服务器。它在你的本地机器上有它自己的开发数据存储。在某个时候,您在本地数据库中创建了一个管理员用户。

当您部署在应用引擎上时,它会在Google服务器上运行您的代码。那里有一个数据存储,但它不共享你的开发服务器上的数据。您还需要在生产数据存储中创建一个管理员用户。试试:

python manage.py remote createsuperuser

+0

哦!你的意思是'manage.py syncdb'永远不会在服务器上运行?我还使用一个'initial_data.yaml'内部fixtures目录,该目录自动运行以填充数据库并初始化数据。我如何在服务器端运行'syncdb'? (更新后的问题) – 2013-03-02 18:30:47

+0

是的,syncdb只在本地数据库上运行。AFAIK,当你运行'python manage.py deploy'时,它在本地运行syncdb。我不知道如何在远程运行syncdb。试试'python manage.py远程syncdb'?小心远程加载灯具。它可以工作,但是如果你的夹具包含实体ID,请注意。如果您指定自己的ID,则数据存储库不会知道它们已被使用,并且可能会在稍后自动生成相同的ID。 – dragonx 2013-03-05 17:51:54

相关问题