前提・実現したいこと
現在Python,Djangoを用いてWebアプリの開発を勉強しています。本番運用と開発環境を区別するためにsettings.pyを3つに分割して開発を進めたいです
発生している問題・エラーメッセージ
まずsettings.pyをsettings.py(本番用でまだ使用しないファイル),settings_common.py(本番運用と開発環境で共通する設定部分を書いたファイル),settings_dev.py(開発用の設定ファイル)の3つに分割しました。
Secret Keyは3のファイルに記述してあり、それを1と2に全てインポートしています。
しかし、settings_devを用いてrunserverやmakemigrationsなどをコマンドを入力するとThe Secret Key must not be emptyと認識されてしまい開発が進められない状態です
File "C:\Users\yuto1\Anaconda3\envs\MyDjango\lib\site-packages\django\conf\__init__.py", line 161, in __init__ raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.") django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
該当のソースコード
Python"""
1@settings.common(開発環境と本番環境共通の設定ファイル) 2 3import os 4import logging 5from django.contrib.messages import constants as messages 6from accounts.models import CustomUser 7 8BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 9TEMPLATES_DIRS = os.path.join(BASE_DIR,"templates") 10ALLAUTH_DIR = os.path.join(BASE_DIR,"templates","allauth") 11 12SECRET_KEY = '*****' 13#実際にはsecret kyeが記述してあります 14 15INSTALLED_APPS = [ 16 "accounts.apps.AccountsConfig", 17 "blog.apps.BlogConfig", 18 'django.contrib.admin', 19 'django.contrib.auth', 20 'django.contrib.contenttypes', 21 'django.contrib.sessions', 22 'django.contrib.messages', 23 'django.contrib.staticfiles', 24] 25 26MIDDLEWARE = [ 27 'django.middleware.security.SecurityMiddleware', 28 'django.contrib.sessions.middleware.SessionMiddleware', 29 'django.middleware.common.CommonMiddleware', 30 'django.middleware.csrf.CsrfViewMiddleware', 31 'django.contrib.auth.middleware.AuthenticationMiddleware', 32 'django.contrib.messages.middleware.MessageMiddleware', 33 'django.middleware.clickjacking.XFrameOptionsMiddleware', 34] 35 36ROOT_URLCONF = 'book_study2.urls' 37 38TEMPLATES = [ 39 { 40 'BACKEND': 'django.template.backends.django.DjangoTemplates', 41 'DIRS': [TEMPLATES_DIRS,ALLAUTH_DIR], 42 'APP_DIRS': True, 43 'OPTIONS': { 44 'context_processors': [ 45 'django.template.context_processors.debug', 46 'django.template.context_processors.request', 47 'django.contrib.auth.context_processors.auth', 48 'django.contrib.messages.context_processors.messages', 49 ], 50 }, 51 }, 52] 53 54WSGI_APPLICATION = 'book_study2.wsgi.application' 55 56DATABASES = { 57 'default': { 58 'ENGINE': 'django.db.backends.postgresql_psycopg2', 59 #"NAME" must be a name of the datebase 60 'NAME': "blog", 61 "USER":os.environ.get("DB_USER"), 62 "PASSWORD":os.environ.get("DB_PASSWORD"), 63 "HOST":"", 64 "PORT":"" 65 } 66} 67 68AUTH_PASSWORD_VALIDATORS = [ 69 { 70 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 71 }, 72 { 73 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 74 }, 75 { 76 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 77 }, 78 { 79 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 80 }, 81] 82 83 84LANGUAGE_CODE = 'ja' 85 86TIME_ZONE = 'Asia/Tokyo' 87 88USE_I18N = True 89 90USE_L10N = True 91 92USE_TZ = True 93 94STATIC_URL = '/static/' 95STATICFILES_DIRS =[ 96 os.path.join(BASE_DIR,"static"), 97] 98 99MESSAGE_TAGS = { 100 messages.ERROR:"alert alert-danger", 101 messages.WARNING:"alert alert-warning", 102 messages.SUCCESS:"alert alert-success", 103 messages.INFO:"alert alert-info", 104} 105 106AUTH_USER_MODEL = "accounts.CustomUser" 107 108 109 110@settings_dev(開発環境) 111 112from .settings_common import * 113 114SECRET_KEY = '***' 115#実際にはsecret keyが記述してあります 116 117DEBUG = True 118 119ALLOWED_HOSTS = [] 120 121LOGGING={ 122 "version":1, 123 "disable_existing_loggers":False, 124 125 "loggers":{ 126 "django":{ 127 "handlers":["console"], 128 "level":"INFO", 129 }, 130 "blog":{ 131 "handlers":["console"], 132 "level":"DEBUG", 133 }, 134 }, 135 "handlers":{ 136 "console":{ 137 "level":"DEBUG", 138 "class":"logging.StreamHandler", 139 "formatter":"dev" 140 } 141 }, 142 "formatters":{ 143 "dev":{ 144 "format":"\t".join([ 145 "%(asctime)s", 146 "[%(levelname)s]", 147 "%(pathname)s(Line:%(lineno)d)", 148 "%(message)s" 149 ]) 150 }, 151 } 152} 153 154 155EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" 156 157 158@settings.py(本番環境) 159 160from .settings_common import * 161 162SECRET_KEY = '****' 163#本当はsecret keyが記述してあります 164
試したこと
settings_common.pyの全てをインポートすることでsecret keyの記述を避ける
各ファイルに直接secret keyを記述する
補足情報(FW/ツールのバージョンなど)
Python,django,postgresqlなどのツールは9/12日時点で最新バージョンのモノを使っています
また各ファイルに記述しているsecret keyは全く同じモノを記述しています
あなたの回答
tips
プレビュー