【问题标题】:Django: asynchronously load data when page is requested?Django:请求页面时异步加载数据?
【发布时间】:2017-11-06 12:30:20
【问题描述】:

我是 Django 新手,已经完成了 7 部分教程,现在我正在尝试通过制作自己的应用来了解更多信息。

假设您正在制作一个交互式数据可视化应用程序,其中前端由 d3(或您最喜欢的 JS 库)提供支持,并且您的数据来自服务器。由于您的数据很大,您首先必须将其加载到服务器内存中(可能来自二进制文件,或者您存储它)。然而,您不希望您的用户在可以看到网站的其余部分时看到一个空白页面(可能为交互式数据填写一些参数)。

当用户请求网页时,如何在 Django 仍然呈现页面以及发送 POST 请求以更新某些服务器端信息的同时,在服务器的内存中加载和维护数据?

【问题讨论】:

  • 动态网页通常使用 AJAX。 w3schools.com/xml/ajax_intro.asp。我认为 Django 有一个叫做 Django Channels 的东西,它也可以让你做类似的事情。只是一些有用的信息:在您的 HTTPResponse 中,您可以更改“Content-Disposition”以从服务器获取不同的数据。通常,HTTPResponse 将使用 HTML 更改网页。 “Content-Disposition”允许 API 发送 JSON 数据而不是网页,并允许您在不更改网页的情况下下载文件。
  • 我认为您问题的另一部分是关于让服务器发送大数据。这可以通过 StreamingHttpResponse 来完成,它使用一个生成器来迭代将数据发送到客户端,同时仍然能够处理其他请求。
  • @HashSplat 你能做一个模拟例子吗?

标签: python django python-3.x


【解决方案1】:

Django 没有任何异步方法来处理您的要求。该平台是基于请求的,因此以后无法使用相同的请求发送信息。

这种情况下的解决方案是使用两个视图(或一个可以处理多种格式的视图,如提到的@SumNeuron):

  1. 第一个视图加载您稍后将加载数据的页面。在该页面上,执行 XMLHttpRequest 来请求数据。

  2. 这个视图只发送数据,它可以只是 JSON 格式的数据,也可以是模板生成的部分 HTML。

【讨论】:

  • 你能做一个模拟例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 2013-12-04
相关资源
最近更新 更多