如何在从manage.py

时间:2018-01-09 23:33:48

标签: python django pytest pytest-django

我正在开发一个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注册以运行pytesthttps://docs.djangoproject.com/en/2.0/howto/custom-management-commands/之后)。不过,这似乎有点像用大锤敲打坚果。有什么建议可以更优雅地解决这个问题吗?

2 个答案:

答案 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')

这是我所参与的大多数项目采用的方法,包括测试和本地开发原因。