django的基于类的邮件视图
django-mailviews的Python项目详细描述
django框架的基于类的电子邮件视图,包括消息预览器。
简介
在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 test和 mailviews在您的settings.INSTALLED_APPS内。