关于设计网址的django noob问题

时间:2011-05-27 05:15:10

标签: django url

我有关于创建我的网址的问题。我有这样的模型 -

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 个答案:

答案 0 :(得分:3)

不可否认,这是一个非常主观的问题,但我倾向于将与特定用户有关的数据放在网址的前面。由于会话是属于用户的资源,因此会跟随用户。 Unread实际上是一个过滤掉一些数据的谓词,就像页面范围或“已加星标”的项目一样,因此最终会出现在查询参数中。最后,我喜欢我的参数很容易在javascript中构建,所以我的网址看起来像

/users/tokenmacguy/conversations?unread=true

如果对话从不除了拥有它们的用户之外都可以看到,那么它将依赖于每个用户的资源,例如

/my-profile/conversations?unread=true

答案 1 :(得分:2)

后者是一种更为健全的方法,因为它会让人们更难以看到其他用户未读的对话。

答案 2 :(得分:2)

从请求对象中获取用户,除非登录用户以外的任何人都应该看到未读对话。