与django处理电子邮件的强烈自以为是的方式

django-email-testview的Python项目详细描述


Django电子邮件测试视图

这是一个高度自以为是的小助手工具,帮助我们在艺术 测试我们的电子邮件模板很有可能你无法使用 这在你的项目中是因为它需要你重构大量的代码, 可能不值得这么做。

但是,您可以将此应用程序添加到项目中,然后将其用于 新的电子邮件模板,您可以逐步将旧电子邮件迁移到新的 随着时间的推移框架

问题

我们的应用程序向我们的用户和管理员发送大量不同的电子邮件通知。 在最坏的情况下,开发人员会在前端单击直到 它们到达了某个电子邮件将被触发的点。然后保持 刷新Gmail直到邮件到达,查看它,然后做一些更改, 然后再触发一次这是一个令人难以置信的沮丧和耗时的 工作流程。

解决方案

我们希望有一个视图/emails/test/,它只能由 显示系统中注册的所有电子邮件的列表。 当您单击其中一个链接时,它应该显示一个简单呈现的视图 浏览器中的电子邮件模板

唯一棘手的是,大多数电子邮件需要相当复杂 模板上下文,以便呈现应在 电子邮件如果这个“email testview”不只是呈现 具有fixture值的模板,但甚至调用准备 电子邮件上下文,以便在出现错误时此视图将崩溃 那个功能。

固执己见的方法

使用此应用程序,您将按如下方式创建电子邮件:

步骤1:创建电子邮件模板

假设您有一个名为contact的应用程序首先,您将创建电子邮件 应用程序中的模板:

contact
-- templates
----- contact
-------- email
----------- body
-------------- new_contact_request.html
----------- subject
-------------- new_contact_request.html

按照惯例,电子邮件body和电子邮件subject的文件必须具有 相同的名称,它们必须位于 appname/templates/appname/email/文件夹。

第2步:创建电子邮件功能

就像许多Django应用程序有一个models.pyadmin.py一样,您现在可以 在应用程序中添加emails.py它看起来像这样:

fromemail_testview.registryimportregistrydefnew_contact_email_fixtures():return['Test message'],{'first_name':'First','last_name':'Last'}defnew_contact_email(message,first_name=None,last_name=None):return{'context':{'message':message,'first_name':first_name,'last_name':last_name,},# These are optional:# 'from_email': 'someone@example.com',  # default: settings.FROM_EMAIL# 'recipients': ['someone@example.com'],  # default: the first from settings.ADMINS}registry.register('contact.new_contact_email',new_contact_email,new_contact_email_fixtures)

您可以看到,编写电子邮件由三部分组成:

  1. 首先编写实际的电子邮件函数(这里是:new_contact_email())。 你的email函数可能会引入一些参数,通常是 数据库中的实例或应在 电子邮件此函数只返回应传递到 电子邮件模板。
  2. 接下来编写一个fixtures函数,该函数将返回*args**kwargs您的电子邮件功能需要的。我们在这里使用类似mixer的工具 (使用commit=False)以创建复杂的对象结构(如 只有几行代码的用户购物车
  3. 最后你把这封邮件注册到一个中心注册中心,就像你 同时注册你的django管理类。

为什么我们喜欢这样?

这一切的好处是每当有人需要设计一个新的 电子邮件,他们可能会查看一个已经存在的^ {CD8}}和快速 了解这三步模式,然后复制并粘贴一封旧邮件 根据需要更改所有值而且,每当你需要改变 在旧电子邮件的上下文中,您将具有相应的fixtures函数 就在它的正上方,你会记得你可能需要改变固定装置 也。

另一个很酷的事情是,在这两种情况下,当服务器实际发送 当开发人员在/emails/test/视图中查看电子邮件时, 将调用完全相同的电子邮件功能,因此如果该电子邮件中存在错误 函数,开发人员更有可能在 设计电子邮件

第3步:发送电子邮件

这个应用程序来了有一个send_mail函数,可以像这样使用:

fromemail_testview.utilsimportsend_mailmessage='Some message'first_name='First'last_name='Last'send_mail('contact.new_contact_email',message,first_name=first_name,last_name=last_name)

send_mail函数将把给定的*args**kwargs传递到 电子邮件功能new_contact_email()。然后它将查看电子邮件标识符 你已经给出了(contact.new_contact_email)并计算出模板 名字。

这意味着:您的电子邮件功能名称和模板名称必须相同

第四步:利润

现在您可以以管理员身份登录,转到/emails/test/单击您的电子邮件 要修改,请在浏览器中查看电子邮件并开始修改HTML和 css并立即在浏览器中查看结果

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Java中从本地文件系统导入文件   spring boot如何在Java SpringBoot项目中集成Olingo(Odata)   java查找连续数组中缺少的第k个元素(超过时间限制)   java为什么在mySql中插入1/2行时会得到2/4行   java不能在静态上下文中使用它   File Observer方法的java My onEvent()部分不起作用   java Netty NioSocketChannel在多线程写入时收到中断消息   java将文件夹与父文件夹一起复制   java我的TictaToe代码出了什么问题?如何检查已采取的措施?   java Swing JTable更新   java如何将cordinates查找为int   如何使用selenium和java在firefox中打开新的空选项卡   java Gradle构建输出Jar未运行   java没有GET/WEBINF/jsp/login的映射。jsp