5

我正在开发一个 Django 项目,其中在文件SECRET_KEY中定义了诸如此类的设置,并使用python-dotenv设置环境变量,如下所示:.envmanage.py

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/)。不过,这似乎有点像用大锤敲碎坚果。有什么更优雅的方法来解决这个问题的建议吗?

4

2 回答 2

4

您可以使用,如果没有这样的环境变量os.getenv('SECRET_KEY'),它将返回。None这等效于os.environ.get('SECRET_KEY')并且类似地允许默认值的可选第二个参数(例如os.getenv('SECRET_KEY', 'my-default-key').

这是我从事过的大多数项目都采用的方法,无论是出于测试还是本地开发的原因。

于 2018-01-10T00:35:05.560 回答
2

另一种方法可能是为 Django 创建一个测试运行程序,如https://pytest-django.readthedocs.io/en/latest/faq.html#how-can-i-use-manage-py-test-with-中所述pytest-django

于 2018-01-10T00:30:08.243 回答