我正在开发一个Django项目,其中SECRET_KEY
文件中定义.env
等设置,manage.py
使用python-dotenv设置环境变量,如下所示:
from dotenv import load_dotenv, find_dotenv
if __name__ == "__main__":
load_dotenv(find_dotenv())
# usual manage.py code
然后settings.py
只是从环境变量定义模块级设置,例如
SECRET_KEY = os.environ['SECRET_KEY']
我现在正在切换到pytest-django进行单元测试。但问题是,如果不首先运行python manage.py
,环境变量就不会被设置,所以我最终得到了
E KeyError: 'SECRET_KEY'
我现在正在考虑解决此问题的方法是定义一个自定义操作,以便manage.py
注册以运行pytest
(https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/之后)。不过,这似乎有点像用大锤敲打坚果。有什么建议可以更优雅地解决这个问题吗?
答案 0 :(得分:2)
另一种方法可能是创建Django的测试运行器,如https://pytest-django.readthedocs.io/en/latest/faq.html#how-can-i-use-manage-py-test-with-pytest-django
所述答案 1 :(得分:1)
您可以使用os.getenv('SECRET_KEY')
,如果没有此类环境变量,则会返回None
。这相当于os.environ.get('SECRET_KEY')
,同样允许使用可选的第二个参数作为默认值(例如os.getenv('SECRET_KEY', 'my-default-key')
。
这是我所参与的大多数项目采用的方法,包括测试和本地开发原因。