Итак, у меня есть простой скрипт Django, который я нашел в сети для функции AJAX, которая запускает скрипт Python и получает вывод через stdout.
views.py
from django.shortcuts import render
def index(request):
return render(request,'homepage/page.html')
homepage / page.html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(function()
{
$('#clickme').click(function(){
alert('Im going to start processing');
$.ajax({
url: "static/homepage/js/external_func.py",
type: "POST",
datatype:"json",
data: {'key':'value','key2':'value2'},
success: function(response){
console.log(response.keys);
console.log(response.message);
}
});
});
});
</script>
</head>
<body>
<button id="clickme"> click me </button>
</body>
</html>
Таким образом, вы можете видеть, что мой URL связан с external_func.py
который запускается после нажатия кнопки.Затем скрипт возвращает json.
external_func.py
import sys
import json
import cgi
fs = cgi.FieldStorage()
sys.stdout.write("Content-Type: application/json")
sys.stdout.write("\n")
sys.stdout.write("\n")
result = {}
result['success'] = True
result['message'] = "The command Completed Successfully"
result['keys'] = ",".join(fs.keys())
d = {}
for k in fs.keys():
d[k] = fs.getvalue(k)
result['data'] = d
sys.stdout.write(json.dumps(result, indent=1))
sys.stdout.write("\n")
sys.stdout.close()
Однако, когда я запускаю сервер и нажимаю на кнопку,консоль показывает undefined для обоих значений, то есть response.keys
и response.message
не определены.

Теперь, когда я вместо этого переключаю код на console.log(response)
в homepage/page.html
.Консоль распечатывает весь код external_func.py
в тексте.
Я не смог найти решение онлайн.Кажется, что люди редко вызывают скрипт Python в запросе AJAX, я вижу много сообщений на форуме о том, что AJAX вместо этого требует код php.
EDIT1: Я должен уточнить одну вещь.Это всего лишь небольшой раздел моего проекта, на котором я хочу провести тестирование.В моем реальном проекте у меня будет функция в python, которая требует много времени для вычисления, поэтому я предпочитаю, чтобы веб-страница частично отображалась со значком ожидания во время обработки функции.Выходные данные функции будут отображаться на веб-странице.