Este proyecto funcionaba bien hasta que usé environ para hacer SECRET_KEY y DEBUG como variable de entorno usando environ. Después de recibir este error: -
(env) E:\ecommercedj>python manage.py runserver Traceback (most recent call last): File "E:\ecommercedj\env\lib\site-packages\environ\environ.py", line 273, in get_value value = self.ENVIRON[var] File "c:\users\matruchhaya\appdata\local\programs\python\python38-32\lib\os.py", line 675, in __getitem__ raise KeyError(key) from None KeyError: 'SECRET_KEY' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "manage.py", line 21, in <module> main() File "manage.py", line 17, in main execute_from_command_line(sys.argv) File "E:\ecommercedj\env\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line utility.execute() File "E:\ecommercedj\env\lib\site-packages\django\core\management\__init__.py", line 395, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "E:\ecommercedj\env\lib\site-packages\django\core\management\base.py", line 328, in run_from_argv self.execute(*args, **cmd_options) File "E:\ecommercedj\env\lib\site-packages\django\core\management\commands\runserver.py", line 60, in execute super().execute(*args, **options) File "E:\ecommercedj\env\lib\site-packages\django\core\management\base.py", line 369, in execute output = self.handle(*args, **options) File "E:\ecommercedj\env\lib\site-packages\django\core\management\commands\runserver.py", line 67, in handle if not settings.DEBUG and not settings.ALLOWED_HOSTS: File "E:\ecommercedj\env\lib\site-packages\django\conf\__init__.py", line 76, in __getattr__ self._setup(name) File "E:\ecommercedj\env\lib\site-packages\django\conf\__init__.py", line 63, in _setup self._wrapped = Settings(settings_module) File "E:\ecommercedj\env\lib\site-packages\django\conf\__init__.py", line 142, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "c:\users\matruchhaya\appdata\local\programs\python\python38-32\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 671, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 783, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "E:\ecommercedj\ecom\settings.py", line 11, in <module> SECRET_KEY = env('SECRET_KEY') File "E:\ecommercedj\env\lib\site-packages\environ\environ.py", line 123, in __call__ return self.get_value(var, cast=cast, default=default, parse_default=parse_default) File "E:\ecommercedj\env\lib\site-packages\environ\environ.py", line 277, in get_value raise ImproperlyConfigured(error_msg) django.core.exceptions.ImproperlyConfigured: Set the SECRET_KEY environment variable (env) E:\ecommercedj> import os import environ env = environ.Env() # read th .env file environ.Env.read_env() BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = env('SECRET_KEY') DEBUG = env('DEBUG') ALLOWED_HOSTS = ['*'] ..... SECRET_KEY = my_secret_key_value DEBUG = TrueEl proyecto estaba funcionando bien antes de agregar environ. ¿Estoy recibiendo el error debido a eviron? ¿Cómo debo eliminar este error?
limpia los espacios en .env!!
En el archivo .env, elimine los espacios entre el operador de asignación y var, y entre el valor y el operador de asignación. Me gusta:
DJANGO_SECRET_KEY="NDCNSDIWBDVIBDVUOWDVJ30F9342FE20F9JCME" DEBUG="True"Primero, instala Django-environ así
pip install django-environa continuación, importe entornos en su configuración.py así
import os import environ from pathlib import Path from django.core.exceptions import ImproperlyConfigured # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! env = environ.Env() environ.Env.read_env() def get_env_variable(var_name): try: return os.environ[var_name] except KeyError: error_msg = "set the %s environment variable" % var_name raise ImproperlyConfigured(error_msg) SECRET_KEY = get_env_variable('SECRET_KEY')es el archivo de configuración normal de Django, lo que hiciste fue importar os, environ, ImproperlyConfigured desde la excepción, escribir la función get_env_variable y llamarla contra SECRET_KEY
a continuación, cree un archivo .env en el mismo directorio que su archivo settings.py con este contenido
SECRET_KEY=django-insecure-b)8xiyg09+9)e4ko!o_*%5am=5(%=-%uvo5g*618619)8xcwfareemplace la cadena de clave secreta con la suya propia. puedes hacer referencia a este material
En realidad hay una solución simple.
import os import environ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) env = environ.Env() # read th .env file environ.Env.read_env(env_file=str(BASE_DIR) + '/.env') SECRET_KEY = env('SECRET_KEY') DEBUG = env('DEBUG') ALLOWED_HOSTS = ['*'] ..... SECRET_KEY=secret_key_value DEBUG=TrueFinalmente, no use espacios antes y después de iguales en el archivo .env.
Si su SECRET_KEY comienza con $ (signo de dólar), encontrará la misma excepción que OP, que es un error conocido con el paquete django-environ .
En este caso, solo genera una nueva SECRET_KEY:
from django.core.management.utils import get_random_secret_key print(get_random_secret_key())Primero cree el archivo .env en el mismo directorio que la configuración
En segundo lugar, elimine cualquier espacio entre la variable y el valor-clave (es decir, KEY=my_key )
import environ env = environ.Env() environ.Env.read_env(os.path.join(BASE_DIR, 'somepath/.env')) #<-- where ever your .env lies inside project directory SECRET_KEY = os.environ.get('somekeyInsidenvFile',env('somekeyInsidenvFile')) #¡No tener espacios entre SECRET_KEY=my_secret_key_value me lo resolvió!
El archivo .env debe estar en el mismo directorio que settings.py
¡¡Resuelto!!
En el archivo .env, elimine los espacios entre el operador de asignación y var, y entre el valor y el operador de asignación. Me gusta:
SECRET_KEY=my_secret_key_value DEBUG=True