【发布时间】:2016-09-02 23:53:28
【问题描述】:
我正在学习编码并有一个实时的 Django 项目来保持我的动力。在我的 Django 应用程序中,用户离开 cmets,而其他人则回复所述 cmets。
每当用户刷新他们的主页时,我都会计算他们是否收到了关于他们之前离开的 cmets 的任何新回复,如果收到了则显示通知。
这不会扩展,因为如果用户留下了大量的 cmets 并因此收到了大量的回复,那么计算时间会比不创建内容的 潜伏者 更长。我想改善这些内容创作者的体验。
阅读deeper into it,我认为Django 信号是要走的路。例如,每次留下新回复时,我都可以触发 post_save() 信号,该信号可以被接收并为用户更新通知。这样一来,当回复留下时,通知就会更新——这是应该的方式。
我将不得不重构我的代码,而我对上述的实现细节仍然很模糊。谁能为我提供一个快速说明性示例,说明我如何完成上述操作?它会让我开始。
目前,用户回复处理在我的views.py class PublicreplyView(CreateView) 中的CBV 的form_valid 方法中处理。我猜我可以在我的 CBV 中包含以下方法吗?
from django.db.models.signals import post_save
post_save.connect(form_valid, sender=User)
然后在其他地方我有一个不同的 CBV,一旦他们刷新主页,它就会为每个用户处理通知。我想我需要完全重写它?就像我说的,我在这方面很模糊。
希望有人指导我如何处理一个说明性的简单示例。谢谢!
附言我在 Django
【问题讨论】:
-
这是一个很好的问题,但它的范围很广,可能对 SO 来说太宽泛了。阅读您对问题的描述,听起来您缺少一些东西:如果您不想在每次显示页面时计算通知,则必须存储它们。这意味着在您的 post_save 中,在数据库中的某处存储/更新用户的通知。当他看到主页时,更新(减少)数据库中的相同值。
-
@Djizeus:我如何将
post_save用于CBV 的form_valid方法。对吗?
标签: django django-views django-signals