2013-05-28 81 views
-1

我使用的是django 1.3和python 2.7。用於編寫管理命令的Pythonic解決方案

客戶要求:

我有個客戶要求其說,對用戶活動的電子郵件應生成基於他/她喜歡的用戶。這些偏好基於時間,因此可以是每日,每週或每月。

的偏好多可選擇的,這意味着一個用戶可以接收例如每日以及每週通知。

MODELS.PY:

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

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

類偏好只包含時間偏好即每日,每週,每月

類通知將保持特定用戶的偏好。管理命令將使用此表向用戶發送電子郵件。

問題:

我有些懷疑,而用的管理命令。

  1. 我是否應該只寫一個命令來處理所有3個或更多個案件或每個案件1個命令?
  2. 我應該向偏好模型添加更多信息嗎?例如,應該每天發送郵件的小時數?
  3. cron是否負責根據時間偏好運行命令?
  4. 什麼是解決這個問題的最pythonic方法(如果有人想提出)?

回答

1
  1. 既然你已經預定的時間間隔(每日,每週,每月),你可以有一個處理一個的一切命令。

  2. 您可能要包括一個字段,保持當最後的電子郵件被髮送出去的軌道,這是每封電子郵件被髮送給用戶時更新。

  3. 否,cron是像一個輪詢系統 - 如果某些條件都是有效的執行的一段代碼。但是,何時以及如何頻繁的cron執行

  4. 開發者可以定義我會實現它作爲一個簡單直接的管理命令。如果真的是複雜的,可以考慮使用Django的芹菜(我寧願保持簡單)

你可以做的一件事是將選項添加到管理命令,它給出了之類的東西更多的控制 - 運行命令只preference_type=daily或特定用戶等,如果你想更多的靈活性。

+0

所以基本上你的思維過程同意嗎?我正朝着正確的方向前進? –

+0

是的,我也想忽略django-celery和rabbitMQ。 –

+0

是的,我會執行它的cron方式。 – karthikr

1
  1. 我想創建一個命令(如入口點),因爲它更容易在cron註冊

  2. 是,保持最後發送的電子郵件將一無所獲,反而有益,保持已添加偏好的時間也許也是有益的,django爲此提供了auto_now_add。任何可以幫助自己的信息,或提供更多關於用戶行爲的信息

  3. Cron將被註冊爲以特定間隔運行,它可以是您的管理命令的「入口點」。它會每隔X分鐘爲某個用戶調用管理命令。管理條命令應該實現參與確定邏輯如果電子郵件已發送或不

  4. 管理命令,具有良好結構化/深思熟慮的內部功能

+0

Karthikr和你的答案几乎是一樣的,但他首先回答,因此,我已經接受了他的答案,儘管兩人都投了票。謝謝:) –

相關問題