4

构建响应 Ajax 请求的 PHP 脚本非常简单:

<?php
  $command = $_POST["command"];
  if ($command == "say_hello") {
    $name = $_POST["name"];
    echo json_encode(array("message" => "Hello, " . $name));
  }
?>

并且,至少如果您在客户端使用 jQuery,并且如果您在原始请求上指定了回调函数,则包含消息的数组将被传递到该回调函数中。

但是使用 Python 就没有那么简单了。或者至少我还没有想出如何让它变得那么简单。如果我只是尝试“打印”一个响应(与上面的 PHP 的“echo”语句平行),客户端不会得到任何回报。

每当我在 Internet 上查看如何使用 Python 响应 Ajax 请求时,答案总是涉及使用 Django 或其他一些 Web 框架。

而且我知道这些东西很棒,但是 PHP 做了什么使得不需要使用类似的包?我想用 Python 而不是 PHP 编写我的服务器端脚本,但我更喜欢 DIY 方法来使用第三方框架来完成应该(对吗?)一项非常简单的任务。

有什么帮助吗?如何做到这一点的一个例子将不胜感激。

4

5 回答 5

13

但是使用 Python 就没有那么简单了。或者至少我还没有想出如何让它变得那么简单。如果我只是尝试“打印”一个响应(与上面的 PHP 的“echo”语句平行),客户端不会得到任何回报。

我可能有一些细节错误,但我会尝试解释为什么会这样。首先,您所说的 PHP 是直接烘焙到 apache 网络服务器中的。当您执行 时echo,它会将结果输出到响应流(服务器和客户端之间的 TCP 连接)。当您print在 python 中执行操作时,您所做的是将结果输出到标准输出(命令行)。

大多数语言如何与网络一起工作,请求进入某种网络服务器,然后该网络服务器执行程序。该程序负责返回一个流,Web 服务器接收该流,并通过 TCP 连接流到客户端。

我假设网络服务器将 PHP 标准重定向到网络服务器流,这就是 PHP 能够用来echo返回其结果的方式。这是例外,而不是规则。

因此,要使用 python 来处理请求,您需要有一个可以以某种方式执行 python 的网络服务器。这通常是使用 CGI 完成的。最近,类似的东西mod_python被用来在 apache 中托管 python。如今,wsgiormod_wsgi被使用,这是为与 python 对话的网络服务器定义的标准。

你可能想看看web.py 之类的东西,它是一个极简的 Python Web 框架。这将使您非常接近您正在尝试做的事情。

于 2012-06-05T23:16:43.403 回答
4

PHP 从一开始就考虑到了 Web。相比之下,Python 被设计为一种通用语言。

当您从 PHP 回显时,您实际上是在写入作为 HTTP 响应的一部分发送给用户的流。当您在 python 中进行打印时,默认情况下,输出将写入标准输出流,这意味着输出不会通过 http 发送给用户,而是写入控制台(或目前正在捕获标准输出的任何内容)。

所以对于 PHP,HTTP 是一等公民。对于更通用的语言,如 Python、Ruby、Erlang、C、C++ 和许多其他语言。您必须以不同的方式与 HTTP 通信。PHP 已经通过 apache 的 mod_php 或 PHP-FPM 之类的东西来处理这种通信。

苏……

至于创建自己的服务器端脚本,我强烈建议不要这样做,因为 Python 的框架取代了构建 PHP 的层。因此,使用 Python 自己创建一个符合标准的 http 服务器不会很简单。之所以如此困难,是因为您要么必须与 CGI 或 WSGI(一种用于处理 Web 的 Python 标准)交互,要么创建自己的 HTTP 服务器。如果您认为自己能够胜任这项任务,那么我强烈建议您这样做!通过这样做,您可能会学到很多东西,但这不会是最简单的事情。很棒的是,很多图书馆已经为您处理了这种交流。例如,如果您正在寻找轻量级的东西,我强烈建议您使用像烧瓶这样的微框架如果我需要一些非常简单的东西,这是我个人使用的。它比 django 更容易上手,但它包含的电池也更少。

希望这可以帮助!

于 2012-06-05T23:34:13.567 回答
2

有一个名为json的 python 模块。也许很多答案都涉及框架(如 Django),因为 json 是以 web 为中心的,而 Django、tornado、twisted、cherrypy 等都是 python 与 web 交互的方式。

有许多不同的方法可以做到这一点,这些方法在其他问题中得到解决。但是,为了回答您的问题,python在其标准库中有一个 json 库

于 2012-06-05T22:52:28.250 回答
0

大多数 PHP 安装程序默认配置为通过运行脚本在 web 目录中提供 php 文件。大多数 Python 安装程序没有。使用 apache 服务 Python 的最快方法:

  • 在您的 apache 配置文件中,添加AddHandler cgi-script .py到已经可以提供 PHP 文件的任何块
  • 通过添加 #!/usr/local/bin/python 或系统中 python 所在的任何路径来编译你的 python 脚本
  • 请记住先打印标题,然后是换行符,然后是正文。
  • import cgi如果您想做比发回响应正文更复杂的事情,请使用。

请注意,这不是运行 python 网站的推荐方式,只是快速的 php-ish 方式

于 2012-06-05T22:59:30.967 回答
0

Richardhsu 的要点是正确的。

本质上,python 是一种通用脚本语言。因此,它需要一种连接到 Web 的方法,例如通过打开端口和进行网络编程等。您还可以使用 CGI 连接到 apache 或其他 Web 服务器。

这与 Java、Ruby、Perl 或 C/C++ 进入网络的方式并没有什么不同。事实上,PHP 做了很多相同的事情。它与 Web 服务器的接口比 CGI 更紧密。

如果您要从命令行解释或编译 PHP,那么您将遇到与现在使用 Python 所做的完全相同的问题。问题不在于 PHP 与 Python,而在于您如何使用 HTTP 协议将您选择的脚本语言附加到 Internet。

于 2012-06-05T23:00:42.753 回答