当我使用Django在后端处理某些内容时,如何创建加载页面?

时间:2015-04-21 15:00:48

标签: javascript python django web-applications

我的应用程序有一个主视图功能。成功登录后,将调用此主视图方法,并期望呈现模板。

但是我必须在这个视图方法中执行一些计算[我正在通过制作facebook graph api请求来检查用户的某些条件。]

因此加载需要2~4秒。

如何显示此加载场景,因为模板由return语句呈现,因此仅在过程完成时执行。

我应该制作2个视图,一个用于显示加载,另一个用于计算并继续向其他视图方法发出AJAX请求以检查过程是否完整?

2 个答案:

答案 0 :(得分:2)

你确实应该制作两个视图,一个只返回显示加载UI的页面,另一个用于执行长任务。

将使用“加载”页面发出的AJAX请求调用第二个视图。来自AJAX请求的响应将通知您的“加载”页面,是时候继续前进了。

您需要确保AJAX请求的持续时间不会超过服务器的超时时间(大约10秒,您应该没问题)。

答案 1 :(得分:0)

您需要在异步执行的任务中运行Graph API请求,这样您就可以返回HttpResponse而无需等待任务完成。

Celery将允许您这样做。

然后,您需要一种方法来通知您的客户端异步任务已完成。 我认为有两种方法可以做到这一点:

  1. 定期向一个视图发出AJAX请求,以检查任务是否完成。
  2. 使用WebSockets
  3. 第一种方法是最简单的方法,但其缺点是会产生大量无用的请求并且反应性较低。

    另一方面使用WebSockets需要更多配置,因为需要外部应用程序(例如:django-socketioswampdragon)。 如果它是您需要从服务器到客户端的通知的唯一地方,那么使用WebSockets似乎有点矫枉过正。