在django应用程序中创建警报

时间:2013-02-16 12:37:37

标签: python django

我的模型包含到期日期。该字段如下所示:

passport_date_of_expiry = TodayOrLaterDateField('到期日期')

此字段显示在管理员的列表显示中。我希望实现的是,当到期日期为到期日的6个月或更短时,该项目在管理员的列表显示中用红线突出显示。要么。甚至在发生这种情况时,让系统发送电子邮件作为警报。我怎样才能轻松实现这一目标。数据库中已有大量数据,这是我想要添加到此系统的功能。

2 个答案:

答案 0 :(得分:3)

要在管理员中突出显示,您可以使用以下内容(从https://docs.djangoproject.com/en/1.2/ref/contrib/admin/获取此内容):

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    expiry_date = models.DateTimeField()

    def colored_name(self):
        if datetime.datetime.now() >= self.expiry_date:
            return '<span style="color: red;">%s %s</span>' % (self.first_name, self.last_name)
    colored_name.allow_tags = True

class PersonAdmin(admin.ModelAdmin):
    list_display = ('colored_name', 'first_name', 'last_name')

这将突出显示管理界面中的一个列,但这可以被注意到。

要提醒您应该创建管理命令并从cron运行它。

项目/应用/管理/命令/ check_expired.py:

# -*- coding: utf-8 -*-

from django.core import management
from django.core.mail import mail_admins


class Command(BaseCommand):

    def inner_run(self, *args, **options):
        expired_items = Model.objects.filter(expiry_date__lte=datetime.datetime.now())
        message = some_message_formatter(expired_items)

        mail_admins(subject='Alerts on my Project!', message=message)

的cron:

8 3 */15 * * cd /path/to/project && echo 'Activate virtual env if needed' && PYTHONPATH='Additional_python_path' DJANGO_SETTINGS_MODULE=your_project.settings django-admin.py check_expired

答案 1 :(得分:1)

如果您想要在管理员列表显示中突出显示该项目的路线,则需要覆盖admin / change_list_results.html模板。该文件的片段如下所示:

{% for result in results %}
{% if result.form.non_field_errors %}
<tr><td colspan="{{ result|length }}">{{ result.form.non_field_errors }}</td></tr>
{% endif %}
<tr class="{% cycle 'row1' 'row2' %}">
    {% for item in result %}{{ item }}{% endfor %}   
</tr>
{% endfor %}

您可以尝试添加代码来检查结果项是否具有您要查找的属性,并使用与row1或row2不同的类。请记住,这是一个用于管理员中所有对象的文件。

对于发送电子邮件,您可以编写一个由cron调用的独立脚本。确保将virtualenv的路径添加到sys.path并将os.environ [“DJANGO_SETTINGS_MODULE”]设置为项目设置。之后,使用django.core.mail.MailMessage查找过期的对象并发送邮件应该是一个简单的查询。 https://docs.djangoproject.com/en/1.4/topics/email/