2011-05-27 50 views
0

我對創建我的網址有疑問。我有這樣一個模型 -django noob關於設計網址的問題

class Conversation(models.Model): 
    created_on = models.DateTimeField(auto_now_add=True) 
    subject = models.TextField() 
    started_by = models.ForeignKey(User,related_name='creator') 
    target = models.ForeignKey(User,related_name='receiver') 

class UnreadItems(models.Model): 
    unread = models.BooleanField() 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    user = models.ForeignKey(User,null=True) 
    content_object = generic.GenericForeignKey('content_type','object_id') 

我需要一個視圖,其中我返回當前登錄的用戶(我身邊有3類用戶在我的應用程序)的所有未讀會話。對於我的網址,我可能有foo.com/conversation/unread?user_id=234fsg88j,或者我可以簡單地使用foo.com/conversation/unread/並使用request.user來過濾用戶的對話。

後者是一種更穩健的方法和/或使用它的缺點是什麼?

回答

3

不可否認,這是一個非常主觀的問題,但我傾向於將有關特定用戶的數據放在網址前面。由於對話是屬於用戶的資源,所以會跟隨用戶。 「未讀」實際上是一種謂詞,可以過濾掉某些數據,非常類似於頁面範圍或「加星標」項目,因此最終會以查詢參數結束。最後,我喜歡我的參數很容易在JavaScript構建,所以我對這個網址看起來可能就像

/users/tokenmacguy/conversations?unread=true 

如果對話應該永遠是除了擁有它們的用戶可見的,那麼它會去在一種資源,是每個用戶,像

/my-profile/conversations?unread=true 
+0

我是一個'+ 1'爲未讀作爲一個參數,因爲以後你可以用其他的東西像'未讀= FALSE'或'最新= 10'或'top = 50'等等。 – 2011-05-27 05:29:07

+0

這樣他就必須測試tokenmacguy == request.user.username,這似乎有點多餘恕我直言。作爲參數的未讀過濾器的確有意義。 – 2011-05-27 05:30:20

+0

@Paulo:第一種方式會將tokenmacguy的帖子顯示給任何被允許查看它們的人。如果這在申請的背景下沒有意義,那麼第二個建議可能會更好。 – SingleNegationElimination 2011-05-27 05:39:26

2

後者是一種更健全的方法,因爲它會使人們難以看到其他用戶的未讀對話。

2

從請求對象中獲取用戶,除非登錄用戶以外的任何人都能看到未讀對話。