无法使用有效的用户名和密码登录django管理员视图

时间:2013-03-02 16:46:26

标签: django google-app-engine django-admin django-nonrel

我知道这个问题之前曾被问过好几次,但很久以前就提出了大部分问题,旧答案对我不起作用。

我有一个基于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'发生一样,我不需要手动运行app。

如果我运行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:
如果您从app目录使用appcfg.py update site,它将运行远程服务器上的fixture,而不是使用python manage.py deploy命令。不知道在做什么。
manage.py remote loaddata initdata.yaml也可用于初始化远程数据库。

但即使在此之后,我仍然没有看到管理界面中加载的数据,即数据库未初始化或者管理员视图严重受损。但我会将其保存为另一个问题〜

1 个答案:

答案 0 :(得分:2)

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

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

python manage.py remote createsuperuser