Django视图中的长而慢的操作会导致超时。Python有没有办法改用AJAX呢?

Django视图中的长而慢的操作会导致超时。Python有没有办法改用AJAX呢?,python,ajax,django,timeout,Python,Ajax,Django,Timeout,我编写Python已经有一段时间了,但是DJango和web编程对我来说是新的 我在Python视图中执行了一个很长的操作。由于我的视图中的local()函数需要很长时间才能返回,因此存在HTTP超时。很公平,我理解那部分 立即将HTTPresponse返回给用户,然后在页面中动态显示某些python代码的结果的最佳方式是什么?我怀疑答案可能在阿贾克斯,但我;我不确定客户端上的AJAX是如何从服务器上的Python,甚至是通常用来做这件事的模块中获取信息的。一种方法是使用AJAX/JS或正常方式

我编写Python已经有一段时间了,但是DJango和web编程对我来说是新的

我在Python视图中执行了一个很长的操作。由于我的视图中的local()函数需要很长时间才能返回,因此存在HTTP超时。很公平,我理解那部分


立即将HTTPresponse返回给用户,然后在页面中动态显示某些python代码的结果的最佳方式是什么?我怀疑答案可能在阿贾克斯,但我;我不确定客户端上的AJAX是如何从服务器上的Python,甚至是通常用来做这件事的模块中获取信息的。

一种方法是使用AJAX/JS或正常方式提交任务,在视图中后台启动并立即返回。然后在客户端使用AJAX/JS定期检查任务是否完成。如果完成,请重新加载页面或提供指向客户端的链接

客户端“请使用此数据启动任务。”->SERVER

客户端服务器

客户端服务器


客户端Ajax不需要服务器端的任何特定技术。您所需要的只是以某种形式返回一个响应,客户端的一些Javascript可以理解。JSON在这里是一个很好的选择,因为它很容易在Python中创建(2.6中有一个
JSON
库,对于其他版本,Django有
Django.utils.simplejson


因此,您所需要做的就是将数据以JSON格式保存,然后像发送任何其他响应一样发送数据-即将其包装在
HTTPResponse

中,我不确定这是否是您想要的,但是(如何在Python中为AJAX实现最小服务器?)是有帮助的。在我的回答中,我给出了一个最小的示例(这个示例编写得不是很好,例如,我现在将使用jquery…)

编辑:根据OP的要求,下面是一个使用JQuery的前端示例。请注意,我不是这方面的专家,因此可能存在一些问题。这个例子应该使用JSON-RPC后端,比如


JSON-RPC测试
功能测试按钮(){
var data=$(“[name=test_text]”)。val();
var json_object={“method”:“power”,
“参数”:[parseInt(数据),3],
“id”:“测试按钮”};
var json_string=json.stringify(json_对象);
$.post(“frontend.html”,json_字符串,test_回调,“json”)
}
函数测试_回调(json_对象){
$(“#测试_结果”).text(json_object.result.toString());
}
** 3 =
0

如果有人在服务器上有完整的Python(使用Django的DB模型)和客户端示例上的JQuery,我会有他们的孩子。我无法帮助您使用Django,但在客户端上使用JQuery没有问题,请参阅我的更新答案。
<html>
<head>

<title>JSON-RPC test</title>

<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="json2.js"></script>

<script type="text/javascript">

function test_button() {
    var data = $("[name=test_text]").val();
    var json_object = {"method": "power",
                       "params": [parseInt(data), 3],
                       "id": "test_button"};
    var json_string = JSON.stringify(json_object);
    $.post("frontend.html", json_string, test_callback, "json")
}

function test_callback(json_object) {
    $("#test_result").text(json_object.result.toString());
}

</script>

</head>
<body>

<input type="text" name="test_text" value="2" size="4">
** 3 =
<span id="test_result">0</span>
<input type=button onClick="test_button();" value="calc" title="calculate value">

</body>
</html>