django的基于类的邮件视图

django-mailviews的Python项目详细描述


django框架的基于类的电子邮件视图,包括消息预览器。

https://travis-ci.org/disqus/django-mailviews.png?branch=master

简介

在Django中呈现和发送电子邮件很快就会变得重复和 容易出错。通过在视图类中封装消息呈现,可以 以结构化和清晰的方式轻松撰写消息。

基本用法

frommailviews.messagesimportEmailMessageView# Subclass the `EmailMessageView`, adding the templates you want to render.classWelcomeMessageView(EmailMessageView):subject_template_name='emails/welcome/subject.txt'body_template_name='emails/welcome/body.txt'# Instantiate and send a message.message=WelcomeMessageView().send(extra_context={'user':user,},to=(user.email,))

实际上,这并不是向用户发送消息的最佳模式,请阅读 “最佳实践”下的注释,以获得更好的方法。

使用预览站点

注册URL并启用发现

  • mailviews添加到项目的INSTALLED_APPS设置中。
  • 在项目的ROOT_URLCONF中添加以下内容:
frommailviews.previewsimportautodiscover,siteautodiscover()urlpatterns=patterns('',url(regex=r'^emails/',view=site.urls),)

预览索引现在可以在emails/url上使用。

创建预览类

要创建简单的预览,请在 INSTALLED_APPS,并创建一个新的Preview子类。

frommailviews.previewsimportPreview,sitefromexample.emails.viewsimportWelcomeMessageView# Define a new preview class.classBasicPreview(Preview):message_view=WelcomeMessageView# Register the preview class with the preview index.site.register(BasicPreview)

您可以在test suite中看到更详细的示例 或者在mailviews.previews的代码文档中。

自定义预览行为

您还可以使用django表单自定义消息预览的创建 将form_class属性添加到Preview子类。表格必须 提供返回关键字参数的get_message_view_kwargs方法 在构造消息视图实例时使用。

最佳实践

  • 发送电子邮件时尽量避免使用extra_context参数。 相反,创建一个EmailMessageView子类,其构造函数接受 作为参数,生成上下文和 发送消息。例如,“基本用法”中显示的代码 改为如下:
frommailviews.messagesimportEmailMessageViewclassWelcomeMessageView(EmailMessageView):subject_template_name='emails/welcome/subject.txt'body_template_name='emails/welcome/body.txt'def__init__(self,user,*args,**kwargs):super(WelcomeMessageView,self).__init__(*args,**kwargs)self.user=userdefget_context_data(self,**kwargs):context=super(WelcomeMessageView,self).get_context_data(**kwargs)context['user']=self.userreturncontextdefrender_to_message(self,*args,**kwargs):assert'to'notinkwargs# this should only be sent to the userkwargs['to']=(self.user.email,)returnsuper(WelcomeMessageView,self).render_to_message(*args,**kwargs)# Instantiate and send a message.WelcomeMessageView(user).send()

实际上,您可能会发现封装上面的“用户消息”很有帮助。 模式为混合或子类提供所有的标准抽象 与用户相关的电子邮件。(留给读者作为练习。)

测试和开发

在Python2.6、2.7和3.4(在Django支持的地方)和Django上测试 版本1.3到1.8。(有关支持的特定版本,请参阅travis或 tox build matrix.)要在本地对整个构建矩阵运行测试,请运行 make test-matrix(或者tox,如果已经安装的话。)

发展

要以开发模式安装项目,请运行:

make develop

这将安装依赖项,并生成静态资产。

测试

要针对已安装的django版本运行测试套件,请运行:

python -m mailviews.tests

要查看示例预览站点,可以运行以下命令启动测试服务器:

python -m mailviews.tests.manage runserver

与第三方应用程序集成

运行时,所有测试都将使用django测试运行程序自动运行 如果使用python manage.py testmailviews在您的settings.INSTALLED_APPS内。

覆盖范围

要使用coverage.py生成覆盖率报告,请运行:

coverage run --source=. -m mailviews.tests

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

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧