我使用Django构建了一个Web应用程序,除其他外,它可以向客户端发送电子邮件。当我处于开发模式时,我不希望任何我的测试电子邮件实际上发送给客户端。相反,我想将电子邮件重新路由给我。
目前,在我的开发服务器(通过git克隆了所有代码)上进行开发时,我只是注释掉具有客户端电子邮件地址的行,并添加我的电子邮件地址。这似乎是处理这种情况的一种非常糟糕的方法。我已经被它烧了(向所有客户发送1,700封电子邮件,哦,看,他们所有 来到我的电子邮件地址 ...残酷)
我在考虑实现一个名为DEV
的项目范围变量,该变量位于settings.py
。然后,我将构建一个上下文处理器,它只返回该变量的值。这样,在我的所有视图中,我都可以简单地调用上下文处理器,如果DEV
为真,我可以将email-to
值设置为我的电子邮件地址。否则,email-to
地址将是客户端电子邮件。最后,我可以设置git
忽略我的settings.py
文件,以便dev服务器DEV
变量始终为True
,生产服务器DEV
变量将始终是False
。
问题解决了吗?这是一个好方法吗?有什么更好的方法可以解决这个问题吗?
<小时/> 的修改
似乎我误解了上下文处理器在模板中使用而不是在视图中的事实。我想我的问题实际上是,我如何处理这个问题,以便我可以从任何视图中检查这个变量?
答案 0 :(得分:0)
除了上下文处理器之外,这是你想要做的。它与您的观点无关。
我要做的是以下装饰:
def email(function=None):
def _decorator(view_function):
def _view(request, *args, **kwargs):
if settings.DEV:
settings.EMAIL_TO = 'mymail@host.com'
return view_function(request, *args, **kwargs)
_view.__name__ = view_function.__name__
_view.__dict__ = view_function.__dict__
_view.__doc__ = view_function.__doc__
return _view
if function:
return _decorator(function)
return _decorator
这样你可以做到
@email
def my_view(request, args):
#send your emails here
return HttpResponse("mail sent")
我认为显式装饰器比使用Middlewares(你与ContextProcessor混淆)要好得多。
希望它有所帮助!