问题描述
嗨,我有使用 Virtualenvwrapper 的 django 项目。 我使用 VSCode 并在终端中为我工作等。 我有 3 个文件设置可以在本地服务器和 VPS 服务器中运行项目。 我从设置中删除了我的 SECRET_KEY 和所有带有代码的文件到 json 文件。 并像这样运行项目: 处理 env_name (env_name) 在 my_project 上工作 python manage.py runserver --settings settings.local2 这适用于这样的文件: 像这样:
from my_project.settings import *
import json
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
with open('keys_my_project.json') as config_file:
config = json.load(config_file)
SECRET_KEY = config['SECRET_KEY']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2','NAME': config['NAME'],'USER': config['USER'],'PASSWORD': config['PASSWORD'],'HOST': config['HOST'],'PORT': '5432',}
}
DEBUG = True
ALLOWED_HOSTS = []
STATICFILES_Dirs = [
os.path.join(BASE_DIR,"static"),]
STATIC_ROOT = os.path.join(BASE_DIR,'static_root')
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
现在我在使用 VSCode 调试器时遇到问题:
{
"name": "my_project django","type": "python","request": "launch","program": "my_project/manage.py","args": ["runserver --settings settings.local2"],"django": true
}
我的错误:
Exception has occurred: ImproperlyConfigured
The SECRET_KEY setting must not be empty.
File "my_project\manage.py",line 18,in main
execute_from_command_line(sys.argv)
File "my_project\manage.py",line 22,in <module>
main()
为什么我的 VSCode 调试器不读取设置文件中的 json ?
ps。我的管理.py
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE','my_settings.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
解决方法
变化:
class B
致:
"args": ["runserver --settings settings.local2"],
,
假设您的问题 (--settings settings.local2) 中的错字没有隐藏在您的代码中,我不确定您的确切问题。但是,如果您不介意其他建议,我建议您使用 vscode 的内置功能来处理环境变量。它沿着
{
"name": "my_project django","type": "python","request": "launch","program": "${workspaceFolder}/my_project/manage.py","env": {
"DJANGO_SETTINGS_MODULE": "my_project.config.settings","NAME": "Johnny","SECRET_KEY": "foo",.... and so forth....
}
"args": [
"runserver","--noreload","--nothreading"
],"django": true
}
您也可以使用 .env
文件:
"envFile": "${workspaceFolder}/.env",
然后您可以使用 settings.py
os
中调用这些
import os
SECRET_KEY = os.environ.get('SECRET_KEY','foo')
另请注意 ${workspaceFolder}
和 --nothreading
的使用,甚至可能值得在重构之前使用它们并查看会发生什么。