You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS调用Python脚本返回源码而非执行结果问题求助

解决Ajax调用Python脚本返回源码而非执行结果的问题

嘿,这个问题我之前刚帮朋友排查过!核心原因很简单:你用的Python 2.7基础HTTP服务器(SimpleHTTPServer)只是个静态文件托管工具,它会把所有文件原封不动地返回给客户端,根本不会去解析执行你的Python脚本——这就是为啥你拿到的是login.py的完整代码,而不是脚本运行后的结果。

下面给你两种解决方案,按需选择:

方案1:用CGIHTTPServer执行CGI脚本(适合快速测试)

如果你想继续用CGI模式,得换用Python自带的CGIHTTPServer,它支持执行CGI脚本。步骤如下:

第一步:修正你的Python脚本

CGI脚本必须满足两个要求:要有shebang头,还要输出合法的HTTP响应头。修改后的login.py应该是这样:

#!/usr/bin/env python
import cgi
import json

# 获取GET请求参数(如果是POST的话逻辑类似)
form = cgi.FieldStorage()
userName = form.getvalue('userName', '')
password = form.getvalue('password', '')

# 这里写你的登录验证逻辑,示例仅做演示
if userName == 'admin' and password == 'test123':
    result = {"success": True, "msg": "登录成功"}
else:
    result = {"success": False, "msg": "账号或密码错误"}

# 必须先输出HTTP Content-Type头,再输出空行分隔头和内容
print "Content-Type: application/json"
print
print json.dumps(result)

第二步:调整文件结构并启动CGI服务器

  • 把login.py移到项目根目录下新建的cgi-bin文件夹里(CGIHTTPServer默认只会执行这个目录下的脚本)
  • 命令行启动服务器:
python -m CGIHTTPServer 8000

第三步:修改AngularJS的Ajax调用

要把URL改成/cgi-bin/login.py,并且把参数拼到URL里(因为是GET请求):

$scope.login = function(userName,password){ 
    $http({ 
        method : "GET", 
        url : "/cgi-bin/login.py",
        params: { userName: userName, password: password }
    }).then(function (response) { 
        console.log(response.data); 
    }); 
};

方案2:用WSGI框架(推荐,适合实际开发)

CGI模式太老旧了,现在Python Web开发基本都用WSGI框架,比如Flask,比CGI优雅得多,还能轻松处理路由、请求、响应这些复杂逻辑。

第一步:安装Flask

pip install flask

第二步:写Flask应用(比如app.py)

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/login', methods=['POST'])  # 实际项目用POST更安全
def login():
    # 获取请求参数(POST的话用request.form,JSON格式用request.get_json())
    data = request.get_json() or request.form
    userName = data.get('userName', '')
    password = data.get('password', '')

    # 登录验证逻辑
    if userName == 'admin' and password == 'test123':
        return jsonify({"success": True, "msg": "登录成功"})
    else:
        return jsonify({"success": False, "msg": "账号或密码错误"})

if __name__ == '__main__':
    app.run(debug=True, port=8000)

第三步:修改AngularJS的Ajax调用

改成POST请求(更安全),URL直接用/login:

$scope.login = function(userName,password){ 
    $http({ 
        method : "POST", 
        url : "/login",
        data: { userName: userName, password: password },
        headers: {'Content-Type': 'application/json'}
    }).then(function (response) { 
        console.log(response.data); 
    }); 
};

第四步:启动Flask服务器

python app.py

几个重要提醒

  • 用GET传密码非常不安全,实际项目一定要用POST+HTTPS
  • Python 2.7已经停止维护好几年了,建议尽快升级到Python 3.x,Flask完全支持3.x版本
  • 如果用CGI方案,Linux/macOS下要给脚本加执行权限:chmod +x cgi-bin/login.py

内容的提问来源于stack exchange,提问作者Harsha Jasti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:01:46