0

我知道这个问题之前已经被问过好几次了,但大部分问题都是很久以前问过的,旧的答案对我不起作用。

我有一个基于 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 sitepython manage.py deploy
manage.py remote loaddata initdata.yaml

但即使在此之后,我仍然看不到管理界面中加载的夹具数据,即似乎数据库没有初始化或者管理视图可能被严重破坏。但我会留到另一个问题~

4

1 回答 1

2

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

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

python manage.py remote createsuperuser

于 2013-03-02T17:30:25.497 回答