【问题标题】:Periodically fetch data and display it with Django定期获取数据并用 Django 显示
【发布时间】:2013-05-07 12:25:56
【问题描述】:

我想在我的 Django 应用程序中实现一种“实时”通知系统。

我会在我的数据库中存储一些发往特定用户的消息。 当用户登录到应用程序时,如果数据库中有针对他的通知,则应用程序使用消息框架显示它。 当他点击消息时,它会从数据库中删除。

我有点卡在“每分钟获取数据”这件事上。我听说过 celery (http://docs.celeryproject.org/en/latest/#),但我想确定这是在潜入之前去那里的方法,因为设置和使用似乎有点复杂。

如果有一种简单的方法来守护 django 函数,或者如果已经存在与我想做的类似的事情,我将不胜感激!

【问题讨论】:

  • 一句话:Ajax。为该特定任务定义一些视图方法,并使用 Ajax 在 javascript 客户端代码中调用它。这是让您入门的简单方法。
  • 你如何定期调用这个方法?我不完全是 Ajax 专家
  • 还有其他问题,这个解决方案不会大大降低我的应用程序速度吗?
  • 实际上,有两种方法可以守护一个互联网应用程序。 Ajax(最常见的一种)和最近的 WebSockects(尚未被所有浏览器完全支持)。 Ajax 的工作方式类似于轮询。这意味着,每分钟查询一次您的网络服务器。例如,这就是 Facebook 的工作方式。如果只是一项简单的任务,那么设置将非常容易。我会写一个答案来指导你。

标签: django daemon django-notification


【解决方案1】:

如果只是一个简单的任务,你可以使用 Ajax。

只需为 ajax 查询声明一个 URL:

#urls.py

...
url(r'^ajax/my_query$', my_app.views.ajax_processor)
...

然后在你的my_app/views.py:

#views.py

def ajax_processor(request):

    ... do the processing you want as if it is a normal web request.
    ... like querying the database
    ... you can return a `json` dictionary 
    ... or a normal `render_to_response` template with html

这应该在服务器端进行。在客户端,最好使用带有$.ajax 函数的jQuery 并执行以下操作:

$.ajax({
    url:'/ajax/my_query',  // a normal get request
    success:function(data){  // success is the callback when the server responds
        /* if is json what you decided to return then process the json dict
           if is normal html render it wherver you want
        */
    }
});

只是一个简单的设置,服务器端的一些代码和客户端的一些代码。

如果您计划开发一个高度实时的应用程序,那么您应该依赖一个更好的库,但如果您只需要做一点异步查询,那么您可以考虑这种方式。

Here is a good and simple ajax tutorial 由 W3Schools 提供,可帮助您了解 Ajax,here 您可以找到有关使用 ajax/jquery 进行轮询的有用信息。

祝你好运!

【讨论】:

  • 感谢您提供的详细信息,我想在尝试芹菜之前先尝试一下。我想我的函数应该足够简单,可以由 ajax 处理。
  • 不客气。我添加了一个 ajax 教程的链接来帮助你更多。
【解决方案2】:

以下是一些可供考虑的选项:

  • celery。是的,设置起来并不是那么简单,但是通过django-celery 从您的 python/django 端配置和使用它非常容易。也可以看看 celery periodic tasks

  • rq(Redis 队列)。易于设置的简单作业队列。

  • django-cronograph。通过管理员命令轻松创建和运行 cron 作业。

另见:

【讨论】:

  • 感谢您的链接!我会尽快检查出来:)
猜你喜欢
  • 2018-11-10
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
相关资源
最近更新 更多