【问题标题】:VSCode Django VirtualenvwrapperVSCode Django 虚拟环境包装器
【发布时间】:2021-03-31 10:53:19
【问题描述】:

您好,我有使用 Virtualenvwrapper 的 django 项目。 我使用 VSCode 并在终端中为我工作等。 我有 3 个文件设置来在本地服务器和 VPS 服务器中运行项目。 我从设置中删除了我的 SECRET_KEY 和所有带有 json 文件代码的文件。 并像这样运行项目: 工作环境名称 (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。我的manage.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()

【问题讨论】:

    标签: django visual-studio-code virtual-machine virtualenvwrapper


    【解决方案1】:

    变化:

    "args": ["runserver --settings settings.local2"],
    

    收件人:

    "args": ["runserver", "--settings settings.local2"],
    

    【讨论】:

    • 它不起作用;/它只有在我将我的 manage.py 覆盖到 debbuger.py 时才起作用:从 settings.local2 导入 DEBUG 然后如果 DEBUG == True: os.environ.setdefault(' DJANGO_SETTINGS_MODULE', 'settings.local2') 但我不喜欢这种方式
    【解决方案2】:

    假设您的问题中的错字(--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",
    

    然后您可以使用os 在settings.py 中调用这些

    import os
    SECRET_KEY = os.environ.get('SECRET_KEY', 'foo')
    

    还要注意${workspaceFolder} 和--nothreading 的使用,甚至可能值得玩一下这些并在重构之前看看会发生什么。

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 2014-11-09
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 2019-01-20
      • 1970-01-01
      • 2019-05-16
      相关资源
      最近更新 更多