2009-10-17 13 views
5

Tôi đã lập trình Python một thời gian, nhưng Django và lập trình web nói chung là mới đối với tôi.Dài, hoạt động chậm trong chế độ xem Django gây ra thời gian chờ. Bất kỳ cách nào để Python nói AJAX thay thế?

Tôi có một hoạt động rất dài thực hiện trong một cái nhìn Python. Vì hàm local() trong chế độ xem của tôi mất nhiều thời gian để trả về, có thời gian chờ HTTP. Đủ công bằng, tôi hiểu phần đó.

cách tốt nhất để đưa ra một HttpResponse lại cho người sử dụng tôi ngay lập tức, sau đó tự động hiển thị các kết quả của một số mã python trong trang là gì? Tôi nghi ngờ câu trả lời có thể nằm trong AJAX nhưng tôi không chắc làm thế nào AJAX trên máy khách có thể được cho ăn từ Python trên máy chủ, hoặc thậm chí các mô-đun thường sử dụng để làm một điều như vậy.

Trả lời

7

Ajax không đòi hỏi bất kỳ công nghệ đặc biệt ở phía máy chủ. Tất cả những gì bạn cần là trả lại một phản hồi ở một dạng nào đó mà một số Javascript ở phía máy khách có thể hiểu được. JSON là một lựa chọn tuyệt vời ở đây, vì thật dễ dàng để tạo bằng Python (có thư viện json ở 2.6 và Django có django.utils.simplejson cho các phiên bản khác).

Vì vậy, tất cả những gì bạn cần làm là đặt dữ liệu của bạn ở dạng JSON, sau đó gửi nó giống như bất kỳ phản hồi nào khác - tức là bằng cách gói nó trong một HTTPResponse.

5

Một cách là nộp nhiệm vụ sử dụng AJAX/JS hoặc theo cách thông thường, bắt đầu nó ở chế độ nền theo quan điểm của mình và trở về ngay lập tức. Sau đó sử dụng AJAX/JS ở phía máy khách để kiểm tra định kỳ xem công việc đã hoàn thành chưa. Nếu nó được thực hiện tải lại trang hoặc cung cấp một liên kết cho khách hàng.

KHÁCH HÀNG "Hãy bắt đầu một nhiệm vụ sử dụng dữ liệu này." -> MÁY CHỦ

KHÁCH HÀNG < - "Task bắt đầu!" MÁY CHỦ

KHÁCH HÀNG "Done?" -> MÁY CHỦ

KHÁCH HÀNG < - "Nope" MÁY CHỦ

KHÁCH HÀNG "Done?" -> MÁY CHỦ

KHÁCH HÀNG < - "Đúng, đây là một liên kết nơi bạn có thể xem kết quả" MÁY CHỦ

khi gửi dữ liệu từ máy chủ cho khách hàng mà không cần khách hàng yêu cầu nó là có thể, cũng loại a, (công nghệ được gọi là Comet) nó không phải là thực sự cần thiết trong trường hợp của bạn.

1

Tôi không chắc chắn nếu đây là những gì bạn đang tìm kiếm, nhưng maybe this question (Làm thế nào để thực hiện một máy chủ tối thiểu cho AJAX trong Python?) Là hữu ích. Trong câu trả lời của tôi, tôi đưa ra một ví dụ tối thiểu (không được viết rất tốt, ví dụ bây giờ tôi sẽ sử dụng jquery ...).

Edit: Theo yêu cầu của OP, đây là một ví dụ cho frontend với JQuery. Lưu ý rằng tôi không có chuyên gia về điều này, vì vậy có thể có vấn đề. Ví dụ này là nghĩa vụ phải làm việc với một phụ trợ JSON-RPC, như this one.

<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> 
+0

Nếu ai đó đã hoàn thành Python trên máy chủ (sử dụng mô hình DB của Django) và JQuery trên ví dụ ứng dụng khách, tôi sẽ có con. – mikemaccana

+0

Tôi không thể giúp bạn với Django, nhưng bằng cách sử dụng JQuery trên máy khách là không có vấn đề, xem câu trả lời cập nhật của tôi. – nikow

Các vấn đề liên quan