我預測的唯一潛在的問題是,如果有人已經連接並正在監聽流之前,管理員更改它。該人是否應該聽到新的流或者繼續聽到他們正在聽的流?
除此之外,你描述它的方式,我可以看到它的工作。您可以創建一個始終返回當前流的url/view,如/stream/current/
。該URL的觀點總是會得到最新的Stream
模型...
def current_stream(request, *args, **kwargs):
# Get first stream marked as published
s = Stream.objects.filter(is_published=True)[1][0]
return do_streaming_stuff(s)
因爲你將可能使用你的應用程序的其他地方「設置這個流作爲活動流」,你可以把一個你的流模型的一部分...
class Stream(models.Model):
is_published = models.BooleanField()
def set_as_active_stream(self, do_save=True):
enabled_streams = Stream.objects.filter(is_published=True)
for s in enabled_streams:
s.is_published=False
s.save()
if do_save:
self.is_published=True
self.save()
def save(self, *args, **kwargs):
if self.is_published:
# No need to double save, since we're already saving it
self.set_as_active_stream(do_save=False)
super(Stream, self).save(*args, **kwargs)
這聽起來就像我想要做的。輝煌!該網站在任何時候都只會有一條直播節目。另外,每個流都會有一堆用戶可以切換到的MP3錄音。我可以添加功能手動切換流。 我希望管理員能夠從管理區域發佈某個要發佈到該網站的流。我說我需要使用管理員操作來實現此目標嗎? – pastylegs 2010-04-27 10:52:06
我仍然對MVC模式和數據庫操作與邏輯的分離感到頭疼。我注意到該模型具有對自身進行操作的功能。這些應該不是視圖而是模型? – pastylegs 2010-04-27 10:58:25
@pasty Django實際上是MVT,與MVC略有不同。這可能有點優惠,但我傾向於厚實的模型,薄的意見。我發現這種方式的代碼重複較少。我相信其他人可以爲瘦身模式和厚意見做出很好的論證。 – 2010-04-27 17:49:29