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"}
测试
----
===
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='我的项目'
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"}
测试
----