django的简单但丰富的声明性通知框架

Ahem的Python项目详细描述


ahem
===

声明式风格,就像django模型一样。


installation
===




pip install ahem

代码::python

代码::python

settings.py


'task':'mytasks.the_taks',
'schedule':crontab(…),
}
}


documentation
====


如果芹菜库可以导入,它将尝试异步发送通知,否则它将在调用它的同一线程中发送通知。
没有芹菜,周期性通知将不起作用。

tem,请小心。


notifications
----


若要定义通知,请在项目的任何已安装应用程序中创建"notifications.py"文件,并创建扩展ahem
``notification``类的类。

代码::python

my django\u app/notifications.py


from datetime import timedelta
from ahem.notification import notification
from ahem.scopes import querysetscope
from ahem.triggers import delayedtrigger

class myprojectnotification(notifica操作:
name='我的项目'

trigger=delayedtrigger(timedelta(days=1))

backends=['电子邮件']
templates={
'默认值':'路径/到/模板.html'}

-`` name`将用作您的通知,它在您的项目中应该是
唯一的。
-``scope``定义哪些用户将收到通知。
-``trigger``定义如何和何时触发通知。
-``backends``是
通知的可用后端名称列表。
-``带有模板的字典模板``字典模板``字典模板``字典模板`字典模板``字典模板``字典模板``字典模板`字典模板将用于每个后端的每个后端。






<
<
<获取上下文数据数据(自、用户、后端名称、后端名称,\*\\*夸加值)









~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~添加更多变量到
上下文。``默认情况下,user``被添加到上下文中,如果覆盖,请记住调用
``super`'。

代码::python

类通知(通知):

def get_context_data(self,user,backend_name,**kwargs):
kwargs=super(通知,self)。获取_context_data(
user,backend_name,**kwargs)
kwargs['extra_context']='这将显示在通知'
return kwargs

后端
--


当前,``emailbackend`'是唯一可用的后端。我们鼓励开发人员构建新的存储库,然后通过pull请求合并到这个存储库中。


在后端注册用户
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

在使用特定后端向用户发送通知之前,您需要注册它。

代码::python

询问。将使用"用户"电子邮件。

帐篷类型。

scheduling a notification
----


使用"schedule"方法触发通知。使用
``context``kwarg将上下文字典传递给通知。

…代码::python

/>~~~~~~~~~~~~~~~~~~~~~

代码::python

myprojectnotification.schedule(backends=['email'])


overriding trigger
~~~~~~~~~~~~~~~~~~


代码::python

通知将在23:45从芹菜发送。schedules导入crontab
myprojectnotification.schedule(eta=crontab(crontab(hour=23,minute=45))

elta
myprojectnotification.schedule(delay_timedelta=timedelta(minutes=20))

scopes
----


scopes是一种声明性方式,用于选择在执行通知时哪些用户将接收到该通知。默认情况下,ahem有两个作用域,
,但如果您感到冒险,则可以在新的作用域上构建。

~~~~~~~~~~~~~~~~

``querysetscope``将返回所有用户,如果没有参数通过,但您可以通过queryset来筛选所需的参数。

代码::python

from ahem.scopes import querysetscope


类通知(通知):

scope=querysetscope(user.objects.filter(is_staff=true))


terscope
~代码::python

from ahem.scopes import contextfilterscope
class通知(通知):

scope=contextfilterscope(
context key='user'u is'u admin',lookup'u field='is'u admin')


仅对非管理员用户执行操作
通知。计划(context={user-is-admin':false})


筛选作用域(self、queryset、context)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
通过添加"筛选作用域"方法,可以在"通知作用域"中执行额外的筛选。收到你的通知。此方法应返回"user"列表。代码::python

return queryset.filter(first_name='camila').all()


triggers
--


triggers定义何时发送通知。目前可用的触发器有两种:``DelayedTrigger``和``CalendarTrigger``,
,但是您也可以通过扩展``NotificationTrigger``来编写自定义触发器。

Delayed触发器
~~~~~~~~~~~~~~~~~

``delayedtrigger``\s应接收一个时间增量作为其第一个参数。
这将指定在发送
通知之前应等待多长时间。如果未指定timedelta,则会立即发送通知。你可以选择在"每小时"和/或"每分钟"关卡通过。通过这样做,将timedelta添加到
当前时间后,小时和分钟将被覆盖到您指定的时间。代码::python

from datetime import timedelta
from ahem.triggers import delayedtrigger

nute=0)


~~~~~~~~~~~~~~~~~~~

``calendarTrigger``是定期通知,使用``celeri`
``crontab``定义其周期性。有关
更多信息,请参见"芹菜"文档:
http://celeriy.readthedocs.org/en/latest/userguide/periodic tasks.html crontab schedules

。代码::python

from celeriry.schedules import crontab
from ahem.triggers import calendarTrigger





模板
----

``templates``指定应使用哪个模板呈现通知内容。应该至少有一个"默认"模板,
,但您可以为每个后端指定不同的模板。当呈现
模板时,所有上下文变量都将可用。

…代码::python

类通知(通知):

模板={
"默认":"路径/to/your/template.html",
"电子邮件":"路径/to/email/template.html"}

测试
----

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

推荐PyPI第三方库


热门话题
java如何将HashMap<String,Object>从一个活动传递到另一个活动   java如何手动加密socket连接的流量?   java正则表达式生成一个不正确的结果   Java方法引用具有泛型参数的方法   java app setBackground()错误:不兼容的类型:int无法转换为Drawable   java是启动Spring引导而不是SpringApplication的其他方法。跑   无法打开java类路径资源[org/quartz/impl/jdbcjobstore/tables_h2.sql],因为它不存在   spring使用Java,如何确定来自tomcat Web服务器的出站服务调用?   java获取多个同名的XML元素JAXB   java使用Ant从同一代码库构建Swing和Android应用程序   JComponent的java重绘方法不起作用   java目标不可访问,标识符“beanName”解析为null   smtp是否有支持esmtp管道的java api?   java如何在Spring中自动连接业务对象   java在Hibernate中没有其他保存实体的方法吗?   针对两个客户机的SpringJavaWeb应用程序项目开发   使用split的java标记化输入