2009-08-13 30 views
1

这里的问题是,这样的事情是否已经存在,或者如果不存在,是否有更好的方式来实现它,而不是我下面描述的。Django中用户可配置的信号机制

我需要让任意主体(用户,组,网站管理)增加Event Sink S(如电子邮件地址,网址Webhook等),系统(通过Web界面),对于每一个,指定应将哪种<Event Source, Event Type>发送给它。因为我做这个ReviewBoard,我给一个假设实现一个具体的例子:

  1. 约翰创建一个新的event_sink(一 网络挂接),由postbin1鉴定;
  2. 约翰指定postbin1将收到ReviewRequest S(一类级subscription - 的source_id是不确定的)publish类型的事件;
  3. 当一个新的review_request被创建时,Event Manager,列表(通过JOIN与subscriptions)所有event_sinks兴趣ReviewRequest S和创建(实例级)subscription结合他们作为一个听者其特定event_type(的名称django信号)感兴趣的到具体的review_request;
  4. 当该review_request被公布后,Event Manager(谁听的publish信号),列出了所有event_sinks感兴趣的是review_request实例和publish信号和调度信号参数的sink方法。
  5. Webhook event_sink将数据封送然后取出并将其张贴到其URL。

这是我想到的架构: alt text http://bayimg.com/image/aadgoaacd.jpg

我即将开始这个实施自己,但我只是想确保我不会重新发明轮子。在Google上找不到任何内容。准备使用的软件包名称,对我有帮助的中途软件包名称和/或对我的DIY方法的批评都是受欢迎的。

回答

1

django-notification作者:James Tauber让你有一个很好的方式。我很希望看到这个应用程序的成熟,如果你愿意努力工作,那将是非常好的代码库。

1

我曾经构建过something very similar,但作为一个小型的REST应用程序(在TurboGears中)。

从来没有得到性能和可靠性,直到我可以使用它的任何严重的事情。它是在webhook开始生根之前设计的,所以我现在可能会考虑这一点。

因为我现在也在Django工作,所以我会很好奇看到你想出什么。我认为你的设计是正确的,这种事件调度器非常有用,值得研究。