【问题标题】:"settings.DATABASES is improperly configured. [...]" when using neo4django.auth and neo4django.admin with only neo4j db“settings.DATABASES 配置不正确。[...]”在仅使用 neo4j db 的 neo4django.auth 和 neo4django.admin 时
【发布时间】:2013-06-20 13:26:49
【问题描述】:

我正在使用 neo4django(github 版本)在 Django 1.4.5 中构建应用程序。我目前正在尝试按照https://neo4django.readthedocs.org/en/latest/admin.html 上的说明启用管理界面

当我点击 /admin 时使用以下设置,我得到了错误 settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

我的 settings.py 包括以下内容

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.dummy',
    }
}
NEO4J_DATABASES = {
    'default' : {
        'HOST':'localhost',
        'PORT':7474,
        'ENDPOINT':'/db/data'
    }
}

AUTHENTICATION_BACKENDS = ('neo4django.auth.backends.NodeModelBackend',)

SESSION_ENGINE = ('django.contrib.sessions.backends.file')

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.request',
    'django.core.context_processors.i18n',
    'django.contrib.messages.context_processors.messages',
    'django.core.context_processors.static',
)

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',
)

INSTALLED_APPS = (
    'neo4django.auth',
    'django.contrib.sessions',
    'django.contrib.messages',
    'neo4django.admin', 
    'neo4django.contenttypes',
    'django.contrib.admin', 
    'django.contrib.contenttypes',
    'django.contrib.auth',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    'my_app',
    'users',
)

我的 urls.py

from django.conf.urls import patterns, include, url
from neo4django import admin


admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', 'my_app.views.MainHomePage', name='home'),
    url(r'^admin/', include(admin.site.urls)),
)

我的models.py

from neo4django.db import models 
from neo4django.auth.models import User

class Person(models.NodeModel):
    email = models.EmailProperty(required = True, unique = True, indexed = True)

    # Neo4J RelationShips
    user = models.Relationship(User, rel_type = 'is_user')

    def __unicode__(self):
        return u'%s' % (self.full_name.strip())

和我的 admin.py(尽可能简单)

from django.contrib import admin
from neo4django.auth.models import User
from users.models import Person 

class UserAdmin(admin.ModelAdmin):
    pass

admin.site.register(User, UserAdmin)

class PersonAdmin(admin.ModelAdmin):
    pass

admin.site.register(Person, PersonAdmin)

我曾尝试将 mysql 与 neo4j 一起使用,但我会得到 no such table: django_site 错误,我必须首先运行 syncdb,至少要创建 django_site 表,或者我只是不断被重定向回来成功登录后进入管理登录页面。

谁能指出我正确的方向,或者至少告诉我是否可以只使用 neo4j?

【问题讨论】:

  • 可以设置任何引擎,例如 'ENGINE': 'django.db.backends.sqlite3',否则
  • django.db.backends.dummy 引发 ImproperlyConfigured 错误。改用适当的数据库后端 - 最简单的是 sqlite3
  • 'ENGINE': 'django.db.backends.dummy', 被mongoengine documentation 复制。我已经尝试过使用mysql。所以,我在INSTALLED_APPS 上注释掉了django.contrib.sites 并已更改为'ENGINE': 'django.db.backends.',现在我没有收到ImproperlyConfigured 错误或no such table: django_site 错误。但我一直被重定向回管理员登录页面。我已经尝试清理我的浏览器缓存。我想我的问题与neo4django 的关系比django 的关系更大。

标签: python django neo4j neo4django


【解决方案1】:

对于数据库设置,我通常只使用

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': ''
    }
}

我知道这很烦人,但只要你不运行syncdb,就不会创建sqlite 文件(而且neo4django 也不需要syncdb)。

就 admin.py 而言,我注意到您是从 django 导入的 - 您需要从 neo4django 导入。试试

from neo4django import admin
from users.models import Person

class PersonAdmin(admin.ModelAdmin):
    ...    

admin.site.register(Person, PersonAdmin)

编辑:

还有一个提示 - 您可能希望在 user 关系上设置 single=True,因为 Person 应该只有一个用户。如果User 应该只有一个人,我还会设置related_single=True, related_name='person',这样您就可以将两者都作为对象而不是经理来访问。

【讨论】:

  • 好吧,即使您不需要它,我也可以忍受必须设置数据库的烦恼,直到我或某人找到解决方案;-) 除此之外,我对管理员进行了更改.py 并且我仍然会在成功登录时被重定向回管理员登录页面。
  • 显然重定向到管理员登录,与会话有关。我更改了我的SESSION_ENGINE,现在一切正常。所以我的问题的结论是,1. from neo4django import admin 到 admin.py,2. 在 DATABASES 设置上有一个虚拟 mysqldb(直到以某种方式解决)和 3. 尝试使用其他一些 SESSION_ENGINE 而不是django.contrib.sessionsbackends.file(我推荐django-redis-sessions)以避免管理员登录重定向。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多