用于分离消息内容和传输方法的django库

django-herald的Python项目详细描述


Django先驱报

最新pypi版本构建状态覆盖状态

徽标

一个Django消息传递库,其功能是:

  • 基于类的声明和注册表方法,如django admin
  • 每封邮件支持多种传输方法(电子邮件、短信、时差等)
  • 基于浏览器的消息预览
  • 维护消息发送尝试的历史记录,并可以查看这些消息
  • 禁用每个用户的通知

python/django支持

我们试图使Herald支持Django的所有版本,而Django支持+介于两者之间的所有版本。

对于python,herald支持上述django版本支持的所有python版本。

因此,从Herald v0.2开始,我们支持Django 1.11、2.0、2.1和2.2,以及Python 2.7、3.4、3.5、3.6和3.7。

如果我有django x和pythonx,我需要什么版本的herald?

如果django/python版本组合在表中有一个--,则不保证它受支持。

<表><广告>py年2.7 py第3.3页 py第3.4页 py年3.5 PY 3.6py年3.7 < /广告><正文>DJ 1.8<;0.2<;0.2<;0.2<;0.2----DJ 1.9-1.10<;0.2--<;0.2<;0.2----DJ 1.11>;=0.1.5-->;=0.1.5>;=0.1.5>;=0.1.5--DJ 2.0---->;=0.1.5>;=0.1.5>;=0.1.5>;=0.2DJ 2.1------>;=0.2>;=0.2>;=0.2DJ 2.2------>;=0.2>;=0.2>;=0。2

安装

  1. pip安装django herald

  2. heralddjango.contrib.sites添加到已安装的应用程序中

  3. 添加先驱报的网址:

    ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
  4. < > >

    用法

    1. 在任何django应用程序中创建notifications.py文件。这就是您的通知类所在的位置。添加这样的类:
    2. < > >
      fromheraldimportregistryfromherald.baseimportEmailNotificationclassWelcomeEmail(EmailNotification):# extend from EmailNotification for emailstemplate_name='welcome_email'# name of template, without extensionsubject='Welcome'# subject of emaildef__init__(self,user):# optionally customize the initializationself.context={'user':user}# set context for the template renderingself.to_emails=[user.email]# set list of emails to send to@staticmethoddefget_demo_args():# define a static method to return list of args needed to initialize class for testingfromusers.modelsimportUserreturn[User.objects.order_by('?')[0]]registry.register(WelcomeEmail)# finally, register your notification class# Alternatively, a class decorator can be used to register the notification:@registry.register_decorator()classWelcomeEmail(EmailNotification):...
      1. 使用此文件结构创建用于呈现电子邮件的模板:

         templates/
             herald/
                 text/
                     welcome_email.txt
                 html/
                     welcome_email.html
        
      2. 导航到/herald/,测试电子邮件的外观

      3. 在代码中的任何需要的地方发送电子邮件:

         WelcomeEmail(user).send()
        
      4. 在django admin中查看已发送的电子邮件,甚至可以重新发送。

      5. < > >

        电子邮件选项

        可以在电子邮件通知类上设置以下选项。例如:

        class WelcomeEmail(EmailNotification):
            cc = ['test@example.com']
        
        • 发件人的电子邮件地址
        • 主题:(str,默认值:)电子邮件主题
        • 收件人电子邮件:(列表[str],默认值:)要发送到的电子邮件字符串列表
        • bcc:(list[str],默认值:none)要作为bcc发送的电子邮件字符串列表
        • cc:(list[str],默认值:none)要作为cc发送的电子邮件字符串列表
        • :(dict,默认值:none)要传递给emailmultialternatives对象的额外头
        • 回复:(列表[str],默认值:)作为回复电子邮件发送的电子邮件字符串列表
        • 附件:(列表)附件列表。有关详细信息,请参见下面的"电子邮件附件"

        自动删除旧通知

        Herald可以在发送新通知时自动删除旧通知。

        要启用此功能,请将herald\u notification\u retention\u时间设置设置为timedelta实例。

        例如:

        HERALD_NOTIFICATION_RETENTION_TIME = timedelta(weeks=8)
        

        每次发送新通知时,将删除所有早于8周的通知。

        手动删除旧通知

        delnotifs命令可用于清除通知历史记录。

        默认用法将删除今天发送的所有内容:

        python manage.py delnotifs
        

        但是,您也可以为startend日期传递参数。结束是截止日期,但不包括该日期。

        python manage.py delnotifs --start='2016-01-01' --end='2016-01-10'

        异步电子邮件发送

        如果你给很多人发送的电子邮件略有不同,可能需要相当长的一段时间才能处理。默认情况下,django将同步处理这一切。对于异步支持,我们推荐django芹菜电子邮件。它非常易于设置和集成:https://github.com/pmclanahan/django-celerie email

        herald.contrib.auth

        django内置了发送密码重置电子邮件的支持。如果要使用herald发送这些电子邮件,可以使用herald.contrib.auth中的通知类。

        首先,将herald.contrib.auth添加到已安装的应用程序中(除了herald)。

        其次,使用heraldpasswordresetform代替django内置的passwordresetform。这一步完全取决于您的项目结构,但它实际上只涉及以某种方式更改密码重置视图上的窗体类:

        # you may simply just need to override the password reset url like so:url(r'^password_reset/$',password_reset,name='password_reset',{'password_reset_form':HeraldPasswordResetForm}),# of if you are using something like django-authtools:url(r'^password_reset/$',PasswordResetView.as_view(form_class=HeraldPasswordResetForm),name='password_reset'),# or you may have a customized version of the password reset view:classMyPasswordResetView(FormView):form_class=HeraldPasswordResetForm# change the form class here# or, you may have a custom password reset form already. In that case, you will want to extend from the HeraldPasswordResetForm:classMyPasswordResetForm(HeraldPasswordResetForm):...# alternatively, you could even just send the notification wherever you wish, seperate from the form:PasswordResetEmail(some_user).send()

        第三,您可能需要自定义电子邮件的模板。默认情况下,herald将使用django为电子邮件的html和文本版本提供的registration/password_reset_email.html。但是您可以简单地覆盖herald/html/password_reset.html和/或herald/text/password_reset.txt以满足您的需要。

        用户禁用通知

        如果要禁用每个用户的某些通知,请将记录添加到usernotification表中,然后 将通知添加到禁用的通知多对多表。

        例如:

        ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
        0

        默认情况下,可以禁用通知。您可以在通知类中设置can disable=false,系统将 使用此默认值填充数据库。通知类还可以通过在 继承的通知类。像这样:

        ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
        1

        电子邮件附件

        要发送附件,请将附件列表分配给emailnotification实例的attachments属性,或重写get_attachments()方法。

        列表中的每个附件都可以是以下附件之一:

        1. 由文件名、原始附件数据和mimetype组成的元组。附件数据由你来决定。像这样:
        2. < > >
          ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
          2
          1. 一个mimebase对象。请参阅Django文档中电子邮件对象/附件下的附件文档。

          2. 一个django文件对象。

          3. < > >

            内联附件

            有时你想直接在电子邮件内容中嵌入一个图像。使用mimeimage将内容id头分配给mimeimage,如下所示:

            ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
            3

            您可以使用如下内容ID(CID)在HTML电子邮件模板中引用这些图像:

            ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
            4

            当然,您需要将"图像文件"添加到上面示例中的模板上下文中。您还可以使用文件操作来完成此操作。在本例中,我们重写了电子邮件通知的get_attachments方法。

            ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
            5

            在模板中,您可以这样引用它,而不需要向上下文中添加任何内容:

            ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
            6

            其他mime附件

            您也可以将任何mimebase对象作为常规附件附加,但必须添加内容处置头,否则将无法访问它们:

            ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
            7

            附件会导致数据库变得很大,因此您应该确保运行管理命令以清除数据库中的旧邮件。

            运行测试

            ifsettings.DEBUG:urlpatterns=[url(r'^herald/',include('herald.urls')),]+urlpatterns
            8

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

            推荐PyPI第三方库


热门话题
java中最小长度的字数计算   java事务处理JavaEE 6   java如何进行5分钟刷新并检查txt是否被修改?   java可以同时拖动多个对象   变量长、双精度、字节、字符在Java中的用途是什么?   spring将XMLBean配置转换为java配置   java检测不可靠网络上的TCP丢失   Java:TCP加密、SSL和Netty   在java中,如何使用isAssignableFrom的映射避免多个if-else   在J2EE动态Web项目中找不到java CSS文件   java遍历领域查询到RealmList   安卓阅读网站内容Java   java如何修改/自定义/反编译Opera mini jar文件?   java死锁播放框架如何使用控制器中的参数检查@RestrictedResource?   java在MS Excel中导入xml文件我们如何使用Python或任何其他编程语言自动化此流程?   java如何暂停正在运行的线程并在需要时重新启动同一线程?