0

我使用 Django 构建了一个 Web 应用程序,除其他外,它可以向客户发送电子邮件。当我处于开发模式时,我不希望我的任何测试电子邮件实际发送给客户。相反,我想将电子邮件重新路由给我。

目前,在我的开发服务器(通过 git 克隆了所有代码)上进行开发时,我只需注释掉包含客户电子邮件地址的行,并添加我的电子邮件地址。这似乎是处理这种情况的一种非常糟糕的方法。我已经被它烧死了(向所有客户发送了 1,700 封电子邮件,哦,看,他们都来到 我的电子邮件地址......残酷)

我正在考虑实施一个项目范围的变量DEV,称为settings.py. 然后,我将构建一个上下文处理器,它只返回这个变量的值。这样,在我看来,我可以简单地调用上下文处理器,如果DEV是真的,我可以将email-to值设置为我的电子邮件地址。否则,该email-to地址将是客户电子邮件。最后,我可以设置git忽略我的settings.py文件,以便开发服务器DEV变量始终是True,生产服务器DEV变量始终是False.

问题解决了?这是一个好方法吗?有没有更好的方法来解决这个问题?


编辑

似乎我误解了上下文处理器是在模板中使用的事实,而不是在视图中。我想我的问题实际上是,我该如何处理这个问题,以便我可以从任何角度检查这个变量?

4

1 回答 1

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")

我认为显式装饰器比使用中间件(您将其与 ContextProcessor 混淆)要好得多。

希望能帮助到你!

于 2013-05-22T05:22:18.463 回答