Ошибка при скрытии django secret_key в среде miniconda

Я полный новичок, и я пытаюсь сделать этот проект, это мой первый раз, и он почти готов. Я пробовал каждый метод, упомянутый в этом SO thread, чтобы переместить секретный ключ из настроек. В каждом методе я получил какую-то ошибку, даже из этого официального документа django метод. Я не мог найти, где я делаю ошибку.

Когда секретный ключ находится внутри settings.py, все работает очень гладко. Но мне нужно отправить свой код в git, поэтому я должен скрыть его от settings.py.

Прямо сейчас я добавляю подробности, когда пытался использовать django-environ, чтобы сохранить секретный ключ вне settings.py.

я помещаю содержимое в корневую папку проекта. скриншот корневого каталога

я использую миниконду: 4.10.1. вот мой файл requirement.txt.

                # platform: linux-64
            _libgcc_mutex=0.1=main
            _openmp_mutex=4.5=1_gnu
            appdirs=1.4.4=py_0
            asgiref=3.3.4=pyhd3eb1b0_0
            attrs=21.2.0=pyhd3eb1b0_0
            black=19.10b0=py_0
            ca-certificates=2021.5.30=ha878542_0
            certifi=2021.5.30=py39hf3d152e_0
            click=8.0.1=pyhd3eb1b0_0
            django=3.2.4=pyhd3eb1b0_0
            django-environ=0.4.5=py_1
            importlib-metadata=3.10.0=py39h06a4308_0
            krb5=1.17.1=h173b8e3_0
            ld_impl_linux-64=2.35.1=h7274673_9
            libedit=3.1.20210216=h27cfd23_1
            libffi=3.3=he6710b0_2
            libgcc-ng=9.3.0=h5101ec6_17
            libgomp=9.3.0=h5101ec6_17
            libpq=12.2=h20c2e04_0
            libstdcxx-ng=9.3.0=hd4cf53a_17
            mypy_extensions=0.4.1=py39h06a4308_0
            ncurses=6.2=he6710b0_1
            openssl=1.1.1k=h7f98852_0
            pathspec=0.7.0=py_0
            pip=21.1.2=py39h06a4308_0
            psycopg2=2.8.6=py39h3c74f83_1
            python=3.9.5=h12debd9_4
            python_abi=3.9=1_cp39
            pytz=2021.1=pyhd3eb1b0_0
            readline=8.1=h27cfd23_0
            regex=2021.4.4=py39h27cfd23_0
            setuptools=52.0.0=py39h06a4308_0
            six=1.16.0=pyh6c4a22f_0
            sqlite=3.35.4=hdfb4753_0
            sqlparse=0.4.1=py_0
            tk=8.6.10=hbc83047_0
            toml=0.10.2=pyhd3eb1b0_0
            typed-ast=1.4.2=py39h27cfd23_1
            typing_extensions=3.7.4.3=pyha847dfd_0
            tzdata=2020f=h52ac0ba_0
            wheel=0.36.2=pyhd3eb1b0_0
            xz=5.2.5=h7b6447c_0
            zipp=3.4.1=pyhd3eb1b0_0
            zlib=1.2.11=h7b6447c_3

settings.py

                import os
            import environ
            from pathlib import Path

            env = environ.Env(
                # set casting, default value
                DEBUG=(bool, False)
            )

            # reading .env file
            environ.Env.read_env()

            # 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!
            SECRET_KEY = env('SECRET_KEY')

            # False if not in os.environ
            DEBUG = env('DEBUG')

я не добавляю остальные настройки. я не думаю, что это важно. если нужно, пожалуйста, укажите обновление I.ll.

я поместил файл .env в корень проекта, где размещены manage.py и db.sqlite3

.env

                #env file

            DEBUG=on

            #copied the entire line from settings.py
            SECRET_KEY ='xxxx django secret key here xxxx'

при запуске python manage.py runserver я получил эту ошибку. вот скриншот

Я не уверен, чего мне не хватает. я получил какую-то ошибку, когда я попробовал каждый метод, и ошибки не совпадают. извините, что я не могу объяснить каждый метод и ошибку здесь.

в этой форме задается несколько вопросов. но на большинство не ответили и некоторые не точно объясняют мою ситуацию. пожалуйста, укажите, если что-то еще необходимо или для получения дополнительных разъяснений.


person legacy    schedule 23.06.2021    source источник


Ответы (2)


Сначала проверьте, что вы установили django-environ и, возможно, у вас есть опечатка в ваших требованиях.txt, это должно быть django-environ=0.4.5 вместо django-environ=0.4.5=py_1, вы можете передать путь вашего .env внутри read_env(env_file="relative_path_of_your_env_file")

он прочитал файл .env в os.environ.

Если не указан путь к пути dotenv, выполняет обратный поиск грязного магического стека, чтобы найти manage.py, а затем найти dotenv.

просмотрите этот код https://github.com/joke2k/django-environ/blob/master/environ/environ.py#L614

person Ankit Tiwari    schedule 23.06.2021
comment
require.txt создается автоматически командой conda list -e › requirements.txt. и при импорте в settings.py ошибки не было. - person legacy; 23.06.2021
comment
я установил django-environ, используя это: conda install -c conda-forge django-environ - person legacy; 23.06.2021
comment
Хорошо, позвольте мне проверить, я не использую conda - person Ankit Tiwari; 23.06.2021
comment
Привет, @legacy, проверьте это docs.conda.io/projects/conda/en/4.6.0/user-guide/tasks/ для настройки переменных среды - person Ankit Tiwari; 23.06.2021
comment
в первой строке ошибки есть пользовательское предупреждение. и они ищут файл .env внутри каталога приложения. не в корне. - person legacy; 23.06.2021
comment
отметьте это, чтобы определить путь к вашему .env во время работы сервера django-environ. readthedocs.io/en/latest/#multiple-env-files - person Ankit Tiwari; 23.06.2021
comment
Давайте продолжим это обсуждение в чате. - person Ankit Tiwari; 23.06.2021

Из структуры файлового дерева видно, что файл .env находится в корневой папке проекта. При проверке сообщения об ошибке видно, что тот, кто ищет файл .env, проверяет в том же месте, что и settings.py.

Итак, если вы используете django-environ для хранения секретного ключа снаружи, поместите файл .env вместе с settings.py. в том же каталоге.

Для получения более подробной информации вы можете обратиться к этому ссылка. Я чувствовал, что это подходит для новичков.

person legacy    schedule 23.06.2021
comment
Здравствуйте @legacy, если мой ответ помог вам, не стесняйтесь принять ответ - person Ankit Tiwari; 23.06.2021