我试图修复我在django应用程序中看到的不发送邮件的错误。请注意,该应用程序运行良好,它只是失败的邮件功能。我试图收集错误日志,但我无法提出与发送邮件相关的任何错误。所以,我举了一个例子来尝试强制错误。这是一个例子:
@Component(
{
selector : 'my-component' ,
template : 'some stuff',
styleUrls : [aVariableHereThatReturnsTheUrl]
}
)
export class MyComponent{
private aVariableHereThatReturnsTheUrl = 'app/src/style/style.css';
}
当我运行上面的代码时,我收到以下错误:
from django.core.mail import send_mail
send_mail('hi', 'hi', 'test@test.com', ['myname@yeah.com'], fail_silently=False)
我设法通过将代码更改为此来修复我的测试示例:
Traceback (most recent call last):
File "dmail.py", line 14, in <module>
send_mail('hi', 'hi', 'test@test.com', ['myname@yeah.com'], fail_silently=False)
File "/data/servers/calendar_1/lib/python2.7/site-packages/django/core/mail/__init__.py", line 59, in send_mail
fail_silently=fail_silently)
File "/data/servers/calendar_1/lib/python2.7/site-packages/django/core/mail/__init__.py", line 29, in get_connection
path = backend or settings.EMAIL_BACKEND
File "/data/servers/calendar_1/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner
self._setup()
File "/data/servers/calendar_1/lib/python2.7/site-packages/django/conf/__init__.py", line 39, in _setup
raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
但是,当我尝试将这些设置添加到send_mail.py时,我仍然没有从我的实际应用程序中收到任何邮件。有人可以向我解释一下,我如何设置DJANGO_SETTINGS_MODULE以便我的示例和我的应用程序都能看到它吗?如果没有,有人可以告诉我如何在django中设置有意义的日志记录,所以我实际上在日志中看到了与邮件相关的错误吗?任何提示或指导将不胜感激。
答案 0 :(得分:4)
请勿在应用程序外部进行设置。在DJANGO_SETTINGS_MODULE
文件中为wsgi
变量输入一个条目。每次启动服务器时,都会自动设置此变量。
例如:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = '<project_name>.settings'
答案 1 :(得分:0)
您使用的是Mac还是Linux?然后只需export DJANGO_SETTINGS_MODULE="project_name.settings.your_settings_file"
如果您的设置文件位于文件夹中,请确保其中还有一个__init__.py
文件。
在Windows上,我相信相当于SET DJANGO_SETTINGS_MODULE="project_name.settings.your_settings_file
,但我可能会弄错。
对于django日志记录,请参阅https://docs.djangoproject.com/en/1.10/topics/logging/
答案 2 :(得分:0)
出于好奇,我调查了django代码以找出wsgi.py中DJANGO_SETTINGS_MODULE的设置在哪里执行。
$ python3
>>> from mysite import wsgi
Traceback (most recent call last):
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_wsgi_application() =>
In "django/core/wsgi.py"
def get_wsgi_application() => django.setup(set_prefix=False) =>
In "django/__init__.py"
def setup(set_prefix=True):
from django.conf import settings
from django.utils.log import configure_logging
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
In "conf/__init__.py"
settings = LazySettings()
class LazySettings(LazyObject):
def __getattr__(self, name=LOGGING_CONFIG):
self._setup(name)
def _setup(self, name=None):
settings_module = os.environ.get(ENVIRONMENT_VARIABLE)
self._wrapped = Settings(settings_module)
class Settings:
def __init__(self, settings_module):
mod = importlib.import_module(settings_module)
After which, we have settings.py imported and verified as below:
>>> mysite.settings.BASE_DIR <<<=== verified
'/home/user/Documents/DjangoTutorial/mysite'
>>> mysite.settings.ROOT_URLCONF <<<=== verified
'mysite.urls'
因此,首先使用configure_logging(settings.LOGGING_CONFIG)导入