【问题标题】:Django1.8 and Mongoclient settings.DATABASES is improperly configured.Django1.8 和 Mongoclient settings.DATABASES 配置不正确。
【发布时间】:2017-07-06 12:01:32
【问题描述】:

我正在使用 django 1.8 和 mongoengine 制作应用程序 但是当我尝试将 Django setting.py 文件配置为使用虚拟数据库时,我收到以下错误

(orahienv) somya@somya-Inspiron-15-3555:/var/www/html/admin_python$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
July 06, 2017 - 16:57:25
Django version 1.8, using settings 'admin_python.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Performing system checks...

System check identified no issues (0 silenced).
July 06, 2017 - 17:00:15
Django version 1.8, using settings 'admin_python.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
<WSGIRequest: GET '/auth/login/?next=/'>
Internal Server Error: /auth/login/
Traceback (most recent call last):
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 164, in get_response
    response = response.render()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/template/response.py", line 158, in render
    self.content = self.rendered_content
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/template/response.py", line 135, in rendered_content
    content = template.render(context, self._request)
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/template/backends/django.py", line 74, in render
    return self.template.render(context)
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/template/base.py", line 208, in render
    with context.bind_template(self):
  File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/template/context.py", line 235, in bind_template
    updates.update(processor(self.request))
  File "/var/www/html/admin_python/admin_app/context_processors.py", line 30, in init_menu
    if request.user.is_authenticated():
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/utils/functional.py", line 226, in inner
    self._setup()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/utils/functional.py", line 359, in _setup
    self._wrapped = self._setupfunc()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/contrib/auth/middleware.py", line 22, in <lambda>
    request.user = SimpleLazyObject(lambda: get_user(request))
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/contrib/auth/middleware.py", line 10, in get_user
    request._cached_user = auth.get_user(request)
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 174, in get_user
    user = backend.get_user(user_id)
  File "/var/www/html/admin_python/admin_app/backend.py", line 29, in get_user
    return TblAdmin.objects.get(pk=user_id)
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/manager.py", line 127, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/query.py", line 328, in get
    num = len(clone)
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/query.py", line 144, in __len__
    self._fetch_all()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/query.py", line 965, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/query.py", line 238, in iterator
    results = compiler.execute_sql()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 818, in execute_sql
    sql, params = self.as_sql()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 367, in as_sql
    extra_select, order_by, group_by = self.pre_sql_setup()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 48, in pre_sql_setup
    self.setup_query()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 39, in setup_query
    self.select, self.klass_info, self.annotation_col_map = self.get_select()
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 216, in get_select
    ret.append((col, self.compile(col, select_format=True), alias))
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 346, in compile
    sql, params = node.as_sql(self, self.connection)
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/expressions.py", line 611, in as_sql
    return "%s.%s" % (qn(self.alias), qn(self.target.column)), []
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 337, in quote_name_unless_alias
    r = self.connection.ops.quote_name(name)
  File "/var/www/html/admin_python/orahienv/local/lib/python2.7/site-packages/django/db/backends/dummy/base.py", line 21, in complain
    raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
[06/Jul/2017 17:00:21]"GET /auth/login/?next=/ HTTP/1.1" 500 206077

我知道以前有人问过类似的问题。但这都是关于引擎价值的。有人知道如何使用 NAME 值解决此错误吗?

setting.py -

import os
import admin_app
from django.utils import timezone
import mongoengine
"""from mongoengine import connect
connect('pom')"""

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'uj8$6(ol=!w)b3-luqzb=#6(j19gkbrnp2asq6=xt%5*s2ylz('

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []

SPATIALITE_LIBRARY_PATH = 'mod_spatialite'
# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'admin_app',
    'celery', #http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#using-the-django-orm-cache-as-a-result-backend
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'djangoflash.middleware.FlashMiddleware',
    #'django.middleware.cache.CacheMiddleware', #http://stackoverflow.com/a/658583/2546013
)

ROOT_URLCONF = 'admin_python.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'media')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'admin_app.context_processors.init_menu',
                'admin_app.context_processors.server_urls',
                'djangoflash.context_processors.flash',
            ],
        },
    },
]


STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
MEDIA_URL = '/media/'
HOST_URL='http://127.0.0.1:8001/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
WSGI_APPLICATION = 'admin_python.wsgi.application'
STATIC_URL = '/static/'
SERVER_URL = 'http://localhost:8001/'
WEBAPP_URL = 'http://localhost/webapp_angular/'
USERAPI_URL = 'http://localhost:8000/'
HOST_URL_NEW='http://localhost:8001/media/'


# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
"""
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'admin_db',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',
    }
}"""

"""DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.dummy', 
    }
}
"""
"""
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.dummy',
        'NAME': 'pom',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',
    }
}
from mongoengine import connect
connect('pom', username='root', password='root')"""
DATABASES = {
    'default': {
        'ENGINE': '',
    },
}


_MONGODB_USER = 'root'
_MONGODB_PASSWD = 'root'
_MONGODB_HOST = 'localhost'
_MONGODB_NAME = 'pom'
_MONGODB_DATABASE_HOST = \
    'mongodb://%s:%s@%s/%s' \
    % (_MONGODB_USER, _MONGODB_PASSWD, _MONGODB_HOST, _MONGODB_NAME)

mongoengine.connect(_MONGODB_NAME, host=_MONGODB_DATABASE_HOST)
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/


LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = False


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/


REST_FRAMEWORK = {
    # other settings...

    'DEFAULT_AUTHENTICATION_CLASSES': [],
    'DEFAULT_PERMISSION_CLASSES': [],
}
LOGIN_URL = '/auth/login/'
LOGIN_REDIRECT_URL = '/'

AUTHENTICATION_BACKENDS = (  
    'admin_app.backend.AuthBackend',
    'django.contrib.auth.backends.ModelBackend',

)

AUTH_USER_MODEL = 'admin_app.TblAdmin'

EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'AKIAJB6VACOVZANVTC5A'
EMAIL_HOST_PASSWORD = 'Atu9qbV+X5aiwIlQzVAOVjU/AxkxMDV3X0l0FLWweSn9'
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'support@doctorinsta.com'

#LOGGING SETTING 
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format' : "[%(asctime)s] %(levelname)s [%(filename)s:%(funcName)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'applogfile': {
            'level':'DEBUG',
            'class':'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'drinsta.log'),
            'formatter': 'verbose'
            },

    },
    'loggers': {
        'django.request': {
            'level': 'ERROR',
            'propagate': True,
            'handlers': ['applogfile',],
        },
        'drinsta': {
            'handlers': ['applogfile',],
            'level': 'DEBUG',
        },
    }
}

#https://docs.djangoproject.com/en/1.8/topics/http/sessions/#configuring-the-session-engine
#https://github.com/dlrust/python-memcached-stats
#We can use the following command to see the keys:
#    python -m memcached_stats 127.0.0.1 11211
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'TIMEOUT' : 300 #Default
    }
}
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

SESSION_ENGINE= 'django.contrib.sessions.backends.cache'

'''
RabbitMQ configurations begins
'''
#OLD FORMAT:
# BROKER_HOST = "127.0.0.1"
# BROKER_PORT = 5672   # default RabbitMQ listening port
# BROKER_USER = "admin"
# BROKER_PASSWORD = "admin"
# BROKER_VHOST = "admin" #Virtual hosts provide a way to segregate applications using the same RabbitMQ instance. Different users can have different access privileges to different vhost and queues and exchanges can be created so they only exists in one vhost. 

#NEW FORMAT:
BROKER_URL = 'amqp://admin:admin@localhost:5672/admin'
'''
RabbitMQ configurations ends
'''
'''
Celery configurations begins
'''
#CELERY_BACKEND = "amqp"  # telling Celery to report the results back to RabbitMQ
#'amqp' means Advanced Message Queuing Protocol
# CELERY_RESULT_DBURI = ""
CELERY_TIMEZONE = "Asia/Kolkata"
#CELERY_RESULT_BACKEND='djcelery.backends.cache:CacheBackend'    
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'

CELERY_IMPORTS = ("tasks", )
CELERY_RESULT_PERSISTENT = True #If set to True, result messages will be persistent. This means the messages will not be lost after a broker restart. The default is for the results to be transient.
CELERY_TASK_RESULT_EXPIRES = None #Never delete the SUCCESSFUL tasks from the database. http://docs.celeryproject.org/en/latest/configuration.html#celery-task-result-expires
# CELERY_RESULT_BACKEND = 'cache+memcached://127.0.0.1:11211/'
# CELERY_CACHE_BACKEND = 'memory'
#http://www.hiddentao.com/archives/2012/01/27/processing-long-running-django-tasks-using-celery-rabbitmq-supervisord-monit/
'''
Celery configurations ends
'''

【问题讨论】:

    标签: django mongodb mongoengine


    【解决方案1】:

    如果您不想配置数据库,因为您使用的是 mongoengine,请从您的设置中完全删除 DATABASES,或将其更改为空字典。

    DATABASES = {}
    

    如果您在 DATABASES 字典中包含任何项目,则它们必须包含 ENGINE,否则您将收到 ImproperlyConfigured 错误。

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            ...
        },
    }
    

    【讨论】:

    • 我通过空字典 DATABASES = {} 得到同样的错误。第二个选项的问题是我有 mongodb 作为数据库使用 sqllite3 引擎是否有效?
    • 我认为它与错误给出的引擎有关。实际上我在这个项目中用 mongodb 数据库替换 sql 所以首先我试图在 django 和 mongodb 数据库之间建立连接,但它给了我这个错误
    • 我是not sure mongoengine supports Django very well,所以我无能为力。我只能说,您原来问题中的ENGINE': '', 绝对无效。
    • 我正在使用 django1.8,其中 django_mongoengine 不支持它只支持旧版本的 django,因为我搜索了我才知道这一点,所以我决定改用 mongoengine。是的,真正的 ENGINE = '';是无效的 。所以我想知道还有其他连接方式吗?
    • 我不知道在 Django 中使用 mongodb 的建议。注意Django support was removed from mongoengine.
    【解决方案2】:
    connect(
        db='test',
        username='user',
        password='12345',
        host='mongodb://admin:qwerty@localhost/production'
    )
    

    并将settings.py 中的DATABASES 更改为DATABASES = {} 部分

    【讨论】:

    • 我编辑了我的代码,但仍然得到相同的错误 DATABASES = {} from mongoengine import connect connect(db='pom', username='root', password='root', host='localhost ')
    • 主机需要像我给出的那样给出,用户/本地主机
    • 我仍然收到同样的错误连接(db='pom',username='admin',password='root',host='mongodb://admin:root@localhost/pom')
    • 删除本地主机后的pom。 / 也应该删除
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    相关资源
    最近更新 更多