Col*_*ole 37 python django pycharm
我已将我的SECRET_KEY值从我的设置文件中移出,并在我加载virtualenv时设置它.我可以确认该值是否存在python manage.py shell.
当我运行Django控制台时,SECRET_KEY它应该丢失.所以在首选项中,我转到Console> Django Console并加载SECRET_KEY适当的值.我回到Django控制台,SECRET_KEY就在那里.
正如所料,我还没有运行manage.py任务,因为它还没有找到SECRET_KEY.所以我进入Run> Edit Configurations SECRET_KEY进入Django服务器和Django测试,并进入项目服务器.重启Pycharm,确认密钥.
当我运行manage.py任务时runserver,我仍然可以KeyError: 'SECRET_KEY'.
我在哪里放这把钥匙?
rh0*_*ium 41
由于Pycharm未从终端启动,因此不会加载您的环境.简而言之,任何GUI程序都不会继承SHELL变量.请参阅此原因(假设使用Mac).
但是,这个问题有几个基本的解决方案.当@ user3228589发布时,您可以将其设置为PyCharm中的变量.这有几个优点和缺点.我个人不喜欢这种方法,因为它不是single source.为了解决这个问题,我在settings.py文件的顶部使用了一个小函数,它在本地.env文件中查找变量.我把所有的"私人"东西放在那里.我也可以在我的virtualenv中引用它.
这是它的样子.
- settings.py
def get_env_variable(var_name, default=False):
"""
Get the environment variable or return exception
:param var_name: Environment Variable to lookup
"""
try:
return os.environ[var_name]
except KeyError:
import StringIO
import ConfigParser
env_file = os.environ.get('PROJECT_ENV_FILE', SITE_ROOT + "/.env")
try:
config = StringIO.StringIO()
config.write("[DATA]\n")
config.write(open(env_file).read())
config.seek(0, os.SEEK_SET)
cp = ConfigParser.ConfigParser()
cp.readfp(config)
value = dict(cp.items('DATA'))[var_name.lower()]
if value.startswith('"') and value.endswith('"'):
value = value[1:-1]
elif value.startswith("'") and value.endswith("'"):
value = value[1:-1]
os.environ.setdefault(var_name, value)
return value
except (KeyError, IOError):
if default is not False:
return default
from django.core.exceptions import ImproperlyConfigured
error_msg = "Either set the env variable '{var}' or place it in your " \
"{env_file} file as '{var} = VALUE'"
raise ImproperlyConfigured(error_msg.format(var=var_name, env_file=env_file))
# Make this unique, and don't share it with anybody.
SECRET_KEY = get_env_variable('SECRET_KEY')
Run Code Online (Sandbox Code Playgroud)
那么env文件看起来像这样:
#!/bin/sh
#
# This should normally be placed in the ${SITE_ROOT}/.env
#
# DEPLOYMENT DO NOT MODIFY THESE..
SECRET_KEY='XXXSECRETKEY'
Run Code Online (Sandbox Code Playgroud)
最后你的virtualenv/bin/postactivate可以获取这个文件.如果您愿意,可以进一步导出变量并按照此处所述导出变量,但由于设置文件直接调用.env,因此根本不需要.
nu *_*est 29
要在PyCharm中设置环境变量,请执行以下操作:
Omr*_*tix 13
您可以通过以下方式设置manage.py任务环境变量:
偏好| 语言与框架| Django的| Manage.py任务
通过run/debug/console配置设置env变量不会影响内置pycharm的manage.py任务.
小智 13
另一个对我有用的选择:
然后Pycharm可以访问环境变量.可能是因为与PyCharm进程有关的事情是shell的一个孩子.
在Pycharm中,manage.py任务在一个孤立的进程中运行,该进程无法访问您的环境变量(与Run/Debug不同).
最简单的解决方案是通过.env直接从文件中读取它们,使您的python代码了解环境变量.
看看:https://github.com/joke2k/django-environ
import environ
env = environ.Env.read_env() # reading .env file
SECRET_KEY = env('SECRET_KEY')
Run Code Online (Sandbox Code Playgroud)
这样,您就拥有了单一的配置源,并且IDE中的设置更少.
希望有所帮助,
将 PyCharm 与 Django 一起使用时,您可以在多个部分设置环境变量 (EV):
File > Settings > Languages and Frameworks > Django
File > Settings > Build, Execution, Deployment > Console > Python Console
File > Settings > Build, Execution, Deployment > Console > Django Console
File > Settings > Tools > Terminal
python manage.py时(即在终端中运行命令时)可以访问它们Run > Edit configurations > [Your Django run configuration]
使用虚拟环境在 PyCharm 2020.2 上进行测试。
| 归档时间: |
|
| 查看次数: |
52156 次 |
| 最近记录: |