Django:请求页面时异步加载数据?

Posted

技术标签:

【中文标题】Django:请求页面时异步加载数据?【英文标题】:Django: asynchronously load data when page is requested? 【发布时间】: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 你能做一个模拟例子吗? 在这里寻找一个很好的例子。 ***.com/questions/20306981/… 和这里 impythonist.wordpress.com/2015/06/16/… 【参考方案1】:

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

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

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

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

【讨论】:

你能做一个模拟例子吗?

以上是关于Django:请求页面时异步加载数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中异步发送 API 请求过程?

dva 如何把同步改为异步请求

极高的加载时间 - 请求未异步运行。猫鼬

ztree异步加载

FLutter入门:异步加载组件FutureBuilder

Flutter 专题15 图解 ListView 异步加载数据与等待 #yyds干货盘点#