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如何使用CircleImageView Android Studio保存图像   java带ArrayList的正数和负数   尝试用java发送邮件时出现电子邮件“异常读取响应”错误   java Maven重定位类调用非重定位类   Java编译器没有给出类型为的封闭实例   java我应该使用哪种设计模式?   java有没有办法通过使用泛型来避免instanceof?   clojure让java集合结构化   java execute postgresql架构脚本Spring DatabasePopulator未终止的美元报价从位置开始   java 安卓视图未从其他类和其他线程更新   在servlet容器中使用rest客户端时的java最佳实践   java<rich:calendar>Locale。美国(翻译成捷克语)   java如何检测jboss集群中是否有JMS实例   java我在安卓上的应用有问题   java使用百分比相对布局创建间距   如何在64位windows上使用java jna?   java如何从html调用servlet,servlet如何调用jsp?   java如何为长文本文章分页