-1

我正在使用 django 1.3 和 python 2.7。

客户要求:

我有一个客户要求,它说应该根据用户的偏好向用户生成一封针对用户活动的电子邮件。这些偏好基于时间,因此可以是每天、每周或每月。

偏好是多选的,这意味着一个用户可以接收例如每天和每周的通知。

模型.PY:

class Preference(models.Model):
    description = models.CharField(max_length=200)

class Notification(models.Model):
    user = models.ForeignKey(User)
    preferences = models.ManyToManyField(Preference)

Class Preference 仅包含时间偏好,即每天、每周、每月

类通知将保留特定用户的偏好。管理命令将使用此表向用户发送电子邮件。

问题 :

我在编写管理命令时有一些疑问。

  1. 我应该只编写一个可以处理所有 3 个或更多案例的命令还是每个案例 1 个命令?
  2. 我是否应该向偏好模型添加任何进一步的信息。例如,应该在多少小时后发送每日邮件?
  3. cron 是否负责根据时间偏好运行命令?
  4. 解决这个问题的最pythonic方法是什么(如果有人想建议)?
4

2 回答 2

1
  1. 由于您有预定义的时间间隔(每天、每周、每月),因此您只需一个命令即可处理所有事情。

  2. 您可能希望包含一个字段来跟踪最后一封电子邮件的发送时间,该字段会在每次为用户发送电子邮件时更新。

  3. 不,cron 就像一个轮询系统 - 如果某些条件有效,则执行一段代码。但是,开发人员可以定义 cron 执行的时间和频率

  4. 为简单起见,我会将其实现为直接的管理命令。如果真的很复杂,考虑使用 django-celery(我宁愿保持简单)

preference_type=daily您可以做的另一件事是向管理命令添加选项,如果您想要更大的灵活性,可以更好地控制诸如 - 仅为或为特定用户运行命令等。

于 2013-05-28T17:12:20.337 回答
1
  1. 我会创建一个命令(作为入口点),因为它更容易在 cron 中注册

  2. 是的,保留上次发送的电子邮件将是有益的,保留添加首选项的时间也可能是有益的,djangoauto_now_add为此目的提供。任何可以帮助您自己走下去的信息,或提供有关用户操作的更多信息

  3. Cron 将被注册以在一定的时间间隔内运行,它可以成为您管理命令的“入口点”。它只会每隔 X 分钟为某个用户调用管理命令。管理命令应实现确定电子邮件是否已发送所涉及的逻辑

  4. 管理命令,具有结构良好/深思熟虑的内部职能

于 2013-05-28T17:15:35.690 回答