我正在使用django 1.3和python 2.7。
客户要求:
我有一个客户要求,该要求说明应根据用户的偏好为用户生成针对用户活动的电子邮件。这些偏好基于时间,因此可以是每日,每周或每月。
首选项是多选的,这意味着一个用户可以接收例如每日和每周通知。
MODELS.PY:
class Preference(models.Model):
description = models.CharField(max_length=200)
class Notification(models.Model):
user = models.ForeignKey(User)
preferences = models.ManyToManyField(Preference)
班级偏好仅包含时间偏好,即每日,每周,每月
类通知会保留特定用户的偏好。管理命令将使用此表向用户发送电子邮件。
问题:
在编写管理命令时我有些疑惑。
答案 0 :(得分:1)
由于您有预定义的时间间隔(每天,每周,每月),您可以只使用一个处理所有内容的命令。
您可能希望包含一个字段,用于跟踪上次发送电子邮件的时间,该字段会在每次向用户发送电子邮件时更新。
不,cron就像一个轮询系统 - 如果某些条件有效,则执行一段代码。但是,开发人员可以定义cron执行的时间和频率
为简单起见,我会将其作为简单的直接管理命令来实现。如果真的很复杂,可以考虑使用django-celery(我宁愿保持简单)
您可以做的另一件事是向管理命令添加选项,如果您想要更多灵活性,它可以更好地控制诸如 - 仅针对preference_type=daily
或特定用户的运行命令等。
答案 1 :(得分:1)
我会创建一个命令(作为入口点),因为它更容易在cron中注册
是的,保留上次发送的电子邮件只不过是有益的,保留添加偏好的时间也可能是有益的,django为此目的提供auto_now_add
。任何可以帮助您自己的信息,或提供有关用户操作的更多信息
Cron将在一定时间间隔内注册运行,它可以作为管理命令的“入口点”。它每隔X分钟就会为某个用户调用管理命令。管理员应该实施所涉及的逻辑,以确定是否已经发送了电子邮件
管理命令,具有结构良好/精心设计的内部功能