Django的定期事件工具

django-eventtools的Python项目详细描述


django eventtools是一个轻量级库,旨在处理重复 以及在网站上显示的一次性事件。

Circle CIcodecovLatest Version

安装

https://pypi.python.org/pypi/django-eventtools/下载源代码 运行python setup.py install,或:

> pip install django-eventtools

要求Django 1.8或更高。

设置

提供以下型号:

from django.db import models

from eventtools.models import BaseEvent, BaseOccurrence


class MyEvent(BaseEvent):
    title = models.CharField(max_length=100)


class MyOccurrence(BaseOccurrence):
    event = models.ForeignKey(MyEvent)

用法

创建事件和事件的示例

>>> from datetime import datetime
>>> from myapp.models import MyEvent
>>> event = MyEvent.objects.create(title='Test event')
>>> once_off = MyOccurrence.objects.create(
        event=event,
        start=datetime(2016, 1, 1, 12, 0),
        end=datetime(2016, 1, 1, 2, 0))
>>> christmas = MyOccurrence.objects.create(
        event=event,
        start=datetime(2015, 12, 25, 7, 0),
        end=datetime(2015, 12, 25, 22, 0),
        repeat='RRULE:FREQ=YEARLY')
>>> daily = MyOccurrence.objects.create(
        event=event,
        start=datetime(2016, 1, 1, 7, 0),
        end=datetime(2016, 1, 1, 8, 0),
        repeat='RRULE:FREQ=DAILY')

事件和事件实例及其关联的查询集,全部 支持all_occurrences方法,它接受两个可选的 参数-from_dateto_date,可以是日期或 约会时间。from_dateto_date默认为None。方法 返回一个python生成器,生成以下格式的元组 (start, end, instance)-例如:

>>> MyEvent.objects.all().all_occurrences()
>>> event.all_occurrences(from_date=datetime(2015, 1, 1, 10, 0))
>>> event.occurrence_set.all().all_occurrences(to_date=date(2016, 1, 1))
>>> occurrence.all_occurrences(from_date=date(2016, 1, 1),
                               to_date=date(2016, 12, 31))

instance是相应baseoccurrence的实例 子类。

还提供了一个next_occurrence方法,采用相同的 参数,但返回单个出现元组。

>>> event.next_occurrence()
>>> event.next_occurrence(from_date=date(2016, 1, 1))

方法first_occurrence还返回一个出现元组, 但不需要争论。

查询集过滤

事件和发生查询集可以过滤,但由于不确定性 重复,^ {Tt3} $过滤只是一个近似值。 (而to_date过滤是准确的)。如果你需要一个查询集 完全过滤,通过exact=True-这将使用生成的 但是仍然返回一个queryset-但是要小心这个 可能非常慢和/或CPU不足。例如

>>> MyEvent.objects.for_period(from_date=date(2015, 1, 1),
                             to_date=date(2015, 12, 31))
>>> event.occurrence_set.for_period(from_date=date(2015, 1, 1), exact=True)

排序查询集

事件和事件查询集也可以按其下一个排序 使用sort_by_next方法发生。默认情况下,此排序 实例的第一次出现;可选的from_date参数 将按from_date之后的下一个匹配项排序。例如

>>> MyEvent.objects.all().sort_by_next()
>>> event.occurrence_set.for_period(from_date=date(2015, 1, 1)) \
>>>      .sort_by_next(date(2015, 1, 1))

请注意,此方法返回的是已排序的列表,而不是queryset。

自定义重复间隔

事件可以使用任何可以表示为 rrulestr。 若要自定义可用选项,请在中设置EVENTTOOLS_REPEAT_CHOICES 你的django设置。默认值为

EVENTTOOLS_REPEAT_CHOICES = (
    ("RRULE:FREQ=DAILY", 'Daily'),
    ("RRULE:FREQ=WEEKLY", 'Weekly'),
    ("RRULE:FREQ=MONTHLY", 'Monthly'),
    ("RRULE:FREQ=YEARLY", 'Yearly'),
)

设置EVENTTOOLS_REPEAT_CHOICES = None使重复成为纯文本 字段。

运行测试

使用tox(https://pypi.python.org/pypi/tox):

> pip install tox
> cd path-to/django-eventtools
> tox

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

推荐PyPI第三方库


热门话题
java无法使用JAXB配置Moxy   java如何让我的简单Swing telnet客户端正确显示字符?   java中从可运行线程调用主线程的多线程处理   java数据源。EBJ3会话bean中的getConnection()   使用java和正则表达式从xml文件提取值时出现问题   java定制Jersy胡须Mvc   在Java中,“限制并发”是什么意思?   java有没有更干净的方法可以在这里使用Optional,而不在三个地方返回“NA”?   java Tomcat启动,然后崩溃,除非我打电话   java理解客户机和服务器   java时间戳将在视图对象>实体转换期间丢失   如何在java中返回布尔值(基元)?   java使用spring mvc设置日志记录,希望仅对我的代码进行跟踪/调试   用Jackson解析嵌套对象