Django的基于类的邮件视图
项目描述
为Django框架提供基于类的电子邮件视图,包括消息预览器。
简介
在Django中渲染和发送电子邮件可能会变得重复且容易出错。通过在视图类中封装消息渲染,您可以轻松地以结构化和清晰的方式编写消息。
基本用法
from mailviews.messages import EmailMessageView
# Subclass the `EmailMessageView`, adding the templates you want to render.
class WelcomeMessageView(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中添加以下内容
from mailviews.previews import autodiscover, site
autodiscover()
urlpatterns = patterns('',
url(regex=r'^emails/', view=site.urls),
)
预览索引现在可在emails/ URL中访问。
创建预览类
要创建一个简单的预览,将emails.previews子模块添加到您的INSTALLED_APPS之一中,并创建一个Preview的新子类。
from mailviews.previews import Preview, site
from example.emails.views import WelcomeMessageView
# Define a new preview class.
class BasicPreview(Preview):
message_view = WelcomeMessageView
# Register the preview class with the preview index.
site.register(BasicPreview)
您可以在测试套件中或mailviews.previews的代码文档中查看更多详细示例。
自定义预览行为
您还可以使用 Django 表单来自定义消息预览的创建,通过在您的 Preview 子类中添加一个 form_class 属性来实现。该表单必须提供一个 get_message_view_kwargs 方法,该方法返回用于构建消息视图实例的关键字参数。
最佳实践
在发送电子邮件时,尽量少使用 extra_context 参数。相反,创建一个接受所有生成上下文和发送消息所需对象的 EmailMessageView 子类。例如,"基本用法" 中显示的代码可以改写为以下内容
from mailviews.messages import EmailMessageView
class WelcomeMessageView(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 = user
def get_context_data(self, **kwargs):
context = super(WelcomeMessageView, self).get_context_data(**kwargs)
context['user'] = self.user
return context
def render_to_message(self, *args, **kwargs):
assert 'to' not in kwargs # this should only be sent to the user
kwargs['to'] = (self.user.email,)
return super(WelcomeMessageView, self).render_to_message(*args, **kwargs)
# Instantiate and send a message.
WelcomeMessageView(user).send()
实际上,您可能发现将上述“用户消息”模式封装到一个 mixin 或子类中很有帮助,该 mixin 或子类为所有与用户相关的电子邮件提供标准抽象。(这留作读者练习。)
测试和开发
已在 Python 2.6、2.7 和 3.4(如果 Django 支持)以及 Django 版本 1.3 至 1.8 上进行测试。(有关支持的具体版本,请参阅 Travis 或 Tox 构建矩阵。)要本地运行针对整个构建矩阵的测试,请运行 make test-matrix(或已安装的 tox)。
开发
要在开发模式下安装项目,请运行
make develop
这将安装依赖项,并构建静态资源。
测试
要针对您安装的 Django 版本运行测试套件,请运行
python -m mailviews.tests
要查看示例预览网站,可以通过运行以下命令启动测试服务器
python -m mailviews.tests.manage runserver
与第三方应用程序的集成
如果您使用 python manage.py test 运行测试并使 mailviews 包含在您的 settings.INSTALLED_APPS 中,所有测试将自动使用 Django 测试运行器运行。
覆盖率
要使用 coverage.py 生成覆盖率报告,请运行
coverage run --source=. -m mailviews.tests
django-mailviews-0.6.5.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 553929e31f80f86355afda86a49ee1e033a29a5656b8a34f1d4e264426dd2804 |
|
MD5 | ff4abc4a7633f72550bf65d033bdd655 |
|
BLAKE2b-256 | 3193362fe42e4568b39ad3fa10ff111193472cf5cd3e58360f3c4a9acfa56c2d |