Django AJAX返回undefined而不是变量 - javascript

因此,我有一个简单的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,该URL在单击按钮后运行。然后,脚本返回一个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()

但是,当我运行服务器并单击按钮时,控制台显示两个值均未定义,这意味着response.keysresponse.message未定义。

Django AJAX返回undefined而不是变量 - javascript

现在,当我改为在console.log(response)中将代码切换为homepage/page.html时。控制台以文本形式打印出整个external_func.py代码。

我找不到在线解决方案。似乎人们很少在AJAX请求中调用Python脚本,我看到很多关于AJAX的论坛帖子都要求php代码。

编辑1:
我必须澄清一件事。这只是我的项目的一小部分,我想对其进行一些测试。在我的实际项目中,我将在python中使用一个函数,该函数需要花费很长时间才能计算出来,因此我更喜欢在函数处理过程中使用一个等待图标来部分渲染网页。该功能的输出将显示在网页上。

参考方案

您有一个django应用,但是您正在使用CGI来实现此功能?为什么?为什么不简单地使函数成为另一个django视图呢?使用django服务您的响应要比CGI更好,除非该功能会大大膨胀或减慢django的速度。就像这样简单:

from django.http import JsonResponse
def func(request):
    result = ...
    return JsonResponse(result)

如果您确实希望将其分为CGI脚本,则最有可能无法获得响应的原因是未将Web服务器配置为处理CGI请求。 (“开发人员工具”的“网络”选项卡对于准确诊断您收到的响应是非常有帮助的。)出于安全原因,默认情况下未启用CGI。您需要告诉Apache(或您使用的任何Web服务器)应该为该目录启用CGI,并且该CGI应该与.py文件关联。

django self,save()之后的成功函数为pk - javascript

我可能会倒退,但是我试图在成功函数中使用pk创建要加载的href。该pk将是新的,并已由save()创建我想知道的是如何将self.pk包发布到js来使用它。JavaScriptJS$.ajax({ type: "POST", url: "/api/add/res/", data: JSON.stringify(dat…

在Django视图中渲染URL变量 - javascript

我试图在URL中传递一个id,它是在js中创建的,我需要在渲染中传递它,以便可以在新页面的jQuery中使用它。这可能吗?JSresults ="'results/"+this.pk+"'"; 网址url(r'^personnel/results/(\d*)/$', '…

什么是最好的免费JavaScript模糊处理程序,可以作为javascript库或python库使用 - javascript

我关注这篇文章:Free JavaScript obfuscators?找到一个JavaScript混淆器,可以帮助我在客户端混淆一些JavaScript数据。但我发现这些选择都不是python或javascript lib,they use java,我使用django,所以我想知道,最好的免费JavaScript混淆器是javascript库或pytho…

Javascript无法读取Django模板中字典的键和值 - javascript

我有一本像这样的字典:dest = {2: [u'canada', u'A', 'Ottawa'], 5: [u'Malaysia', u'A', 'KualaLumpur'],...} 然后,我尝试使用javascript从Django模…

Django调试工具栏错误的路径 - javascript

我创建了一个Django应用,并将其部署到服务器上。我使用了一些额外的django功能,例如django-debug-toolbar,该功能是使用pip从我的requirements.txt文件中安装的。当我在localhost上本地运行应用程序时,一切正常,并且额外功能已成功加载。这是加载的源的正确结构:但是当我出于某种原因从服务器运行我的应用程序时,路径…