我知道这个问题之前曾被问过好几次,但很久以前就提出了大部分问题,旧答案对我不起作用。
我有一个基于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
也可用于初始化远程数据库。
但即使在此之后,我仍然没有看到管理界面中加载的数据,即数据库未初始化或者管理员视图严重受损。但我会将其保存为另一个问题〜
答案 0 :(得分:2)
运行python manage.py runserver
时,它会在本地计算机上启动本地开发服务器。它在您的本地计算机上拥有自己的开发数据存储区。在某些时候,您在本地数据库中创建了一个管理员用户。
在app引擎上部署时,它会在Google的服务器上运行您的代码。那里有一个数据存储区,但它不会在您的开发服务器上共享数据。您还需要在生产数据存储区中创建管理员用户。尝试:
python manage.py remote createsuperuser