在Python中设置环境变量

时间:2019-08-17 20:56:29

标签: python email django-settings

长时间的爬虫,第一次打来。 我试图创建和使用environ var从settings.py文件发送gmail(smtp),但是显然我做错了,因为当我输入密码时它起作用了,但是当我使用os.environ.get隐藏时密码。

我认为我没有正确地调用环境变量,但是我没有头绪!我收到验证错误

import os

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'xxxx----@gmail.com'
EMAIL_HOST_PASSWORD = 'Thisworkedfine'

但是当我使用它时,在系统属性中定义了“ EMAIL_USER”和“ EMAIL_PASS”后,该方法不起作用。


EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = os.environ.get('EMAIL_USER')
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASS')

来自地狱的错误:

SMTPSenderRefused at /password-reset/
(530, b'5.5.1 Authentication Required. Learn more at\n5.5.1  https://support.google.com/mail/?p=WantAuthError c2sm2597974pjs.13 - gsmtp', 'webmaster@localhost')

帮助!

3 个答案:

答案 0 :(得分:1)

一种方法是在另一个python文件中设置变量,然后导入该文件。

创建一个文件,例如myEnvVal.py

import os
# Set environment variables
def setVar():
    os.environ['EMAIL_USER'] = 'xxxx----@gmail.com'
    os.environ['EMAIL_PASSWORD'] = 'Thisworkedfine'

现在导入该文件

import os
import myEnvVal
myEnvVal.setVar()
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = os.environ.get('EMAIL_USER')
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASS')

答案 1 :(得分:1)

我强烈建议将dotenv模块用于python,我个人认为这是处理环境变量的最轻松的方法。

将所有环境变量都保存在只是键值对的.env文件中。 因此,您的.env文件的内容如下所示:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'xxxx----@gmail.com'
EMAIL_HOST_PASSWORD = 'Thisworkedfine'

然后在您要使用envar的任何python文件中执行以下操作:

import os
from dotenv import load_dotenv

EMAIL_BACKEND = os.getenv('EMAIL_BACKEND')

然后只需确保将.env包含在.gitignore中,以使您的秘密始终位于本地。

有关更多信息,请查看dotenv github repo here

答案 2 :(得分:0)

在另一个文件(类似于 envvar.py)中创建两个变量。一个用于电子邮件,一个用于密码:

email = "me@something.com"
password = "somepassword"

然后在您的设置文件中:

import envvar

EMAIL_HOST_USER = envvar.email
EMAIL_HOST_PASSWORD = envvar.password

然后将 envvar 添加到您的 gitignore