python - site - Error de Django DB Settings ''Configurado incorrectamente''
documentacion de django (6)
Django (1.5) está funcionando bien para mí, pero cuando enciendo el intérprete de Python (Python 3) para verificar algunas cosas, obtengo el error más extraño cuando intento importar - from django.contrib.auth.models import User
-
Traceback (most recent call last):
File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 36, in _setup
settings_module = os.environ[ENVIRONMENT_VARIABLE]
File "/usr/lib/python3.2/os.py", line 450, in __getitem__
value = self._data[self.encodekey(key)]
KeyError: b''DJANGO_SETTINGS_MODULE''
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.2/dist-packages/django/contrib/auth/models.py", line 8, in <module>
from django.db import models
File "/usr/local/lib/python3.2/dist-packages/django/db/__init__.py", line 11, in <module>
if settings.DATABASES and DEFAULT_DB_ALIAS not in settings.DATABASES:
File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 52, in __getattr__
self._setup(name)
File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 45, in _setup
% (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting DATABASES,
but settings are not configured. You must either define the environment
variable DJANGO_SETTINGS_MODULE or call settings.configure()
before accessing settings.
¿Cómo podría configurarse incorrectamente, cuando funciona bien fuera del intérprete de Python? En mi configuración de Django, las configuraciones de DATABASES
son:
DATABASES = {
''default'': {
''ENGINE'': ''django.db.backends.postgresql_psycopg2'', # Add ''postgresql_psycopg2'', ''mysql'', ''sqlite3'' or ''oracle''.
''NAME'': ''django_db'', # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
''USER'': ''zamphatta'',
''PASSWORD'': ''mypassword91'',
''HOST'': '''', # Empty for localhost through domain sockets or ''127.0.0.1'' for localhost through TCP.
''PORT'': '''', # Set to empty string for default.
}
}
... ¿cómo está configurado incorrectamente?
En 2017 con django 1.11.5 y python 3.6:
import django
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
django.setup()
El .py
en el que pones este código debe estar en mysite
(el padre)
En Django 1.9, probé django-admin runserver y obtuve el mismo error, pero cuando usé ''python manage.py runserver'' obtuve el resultado deseado. ¡Esto puede resolver este error para mucha gente!
En mi caso, obtuve esto cuando intento ejecutar las pruebas de Django a través de PyCharm. Creo que es porque PyCharm no carga la configuración inicial del proyecto Django, es decir, aquellos que manage.py shell
ejecuta inicialmente. Uno puede agregarlos al inicio del script de prueba o simplemente ejecutar las pruebas usando la manage.py test
.
Versiones:
- Python 3.5 (en virtualenv)
- PyCharm 2016.3.2 Profesional
- Django 1.10
En tu python shell / ipython haz:
from django.conf import settings
settings.configure()
No puedes simplemente iniciar Python y verificar cosas, Django no sabe en qué proyecto quieres trabajar. Tienes que hacer una de estas cosas:
- Utilice el
python manage.py shell
- Utilice el
django-admin.py shell --settings=mysite.settings
(o el módulo de configuración que use) - Establezca la variable de entorno
DJANGO_SETTINGS_MODULE
en su sistema operativo enmysite.settings
(Esto se elimina en Django 1.6) Use
setup_environ
en el intérprete de python:from django.core.management import setup_environ from mysite import settings setup_environ(settings)
Naturalmente, la primera forma es la más fácil.
en mi caso, en django 1.10.1 ejecutándose en python2.7.11, estaba intentando iniciar el servidor usando django-admin runserver
lugar de manage.py runserver
en mi directorio de proyecto.