2012-06-05 23 views
4

建立一个PHP脚本,响应一个Ajax请求一样简单:为什么PHP只能使用Ajax,但Python不能?

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

和,至少,如果你在客户端使用jQuery,如果你对原请求指定一个回调函数,包含消息的数组将被传入该回调函数。

但是对于Python来说并不那么简单。或者至少我还没有想出如何使它变得简单。如果我只是试图“打印”一个响应(与上面的PHP“echo”声明并行),客户端不会收到任何回应。

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

而且我知道这些东西都很棒,但是PHP的做法是什么使得使用类似的软件包变得不必要?我想用Python而不是PHP编写我的服务器端脚本,但我更喜欢D.I.Y.为什么应该使用第三方框架(对吗?)是一个非常简单的任务。

任何帮助?如何做到这一点的例子将不胜感激。

+2

您需要设置您的服务器以便从Python程序提供数据。可以通过CGI,mod_python或使用WSGI(Python服务器网关接口)。 Python的标准库附带了[cgi模块](http://docs.python.org/library/cgi.html),它是与Web服务器交互的基本方式。 – birryree

回答

12

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

我可能会有一些细节错误,但我会试着解释为什么会出现这种情况。首先,你正在谈论的PHP直接被烧入apache web服务器。当您执行echo时,它会将结果输出到响应流(服务器和客户端之间的TCP连接)。当您在python中执行print时,您所做的是将结果输出到标准输出(命令行)。

大多数语言是如何与Web协同工作的,就是请求进入某种Web服务器,并且Web服务器执行一个程序。该程序负责返回网络服务器采用的流,并通过TCP连接流式传输到客户端。

我假设web服务器将PHP标准重定向到web服务器流,这就是PHP如何使用echo来返回其结果。这是例外,而不是规则。

因此,要使用python来为请求提供服务,您需要有一个可以以某种方式执行python的web服务器。这是传统上使用CGI完成的。最近,像mod_python这样的东西被用于在apache中托管python。如今,使用了wsgimod_wsgi,这是为python与web服务器通信定义的标准。

你可能想看看像web.py这是一个极简主义的python web框架。这会让你非常接近你想要做的事情。

+0

击败我,以类似的解释! :-P现在我觉得我有一个重复的答案 – ravenac95

+0

@ ravenac95非常接近。不同的是我建议web.py而不是烧瓶。很高兴知道我在正确的轨道上:P –

2

有一个叫做json的python模块。也许很多答案都涉及到框架(比如Django),因为json是以网络为中心的,而Django,龙卷风,扭曲,cherrypy等等都是python与web交互的手段。

有很多不同的方法可以做到这一点,这些问题在其他问题中得到解决。然而,要回答你的问题,python有一个json library in its standard library

0

大多数PHP安装程序默认配置它们自己,以通过运行脚本为web目录中的php文件提供服务。大多数Python安装程序不会。服务于Python和Apache的最快方式:

  • 在你的Apache配置文件,添加AddHandler cgi-script .py到任何块已经可以成为PHP通过添加#文件
  • 家当你的Python脚本在/ usr/local/bin目录/ Python或无论您的系统中的Python是什么路径
  • 记得首先打印标题,然后是换行符,然后是body。
  • 使用import cgi如果您想执行比发送回应主体更复杂的任何操作。

请注意,这不是建议运行一个python的网站,只是快,PHP上下的方式方式。

0

Richardhsu的正确性。

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

这与Java,Ruby,Perl或C/C++如何进入网络并无二致。事实上,PHP做的事情很多。它与CGI的接口更紧密。

如果您想从命令行解释PHP或编译PHP,那么您现在就会遇到与Python相同的问题。问题不在于PHP与Python,而在于如何使用HTTP协议将所选的脚本语言连接到互联网。

4

从一开始,PHP就是在构建Web时考虑到的。相反,Python被设计为通用语言。

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

所以对于PHP来说,HTTP是一个一流的公民。适用于更多通用语言,如Python,Ruby,Erlang,C,C++和其他许多语言。你必须以不同的方式与HTTP通信。 PHP已经通过Apache的mod_php或类似PHP-FPM来处理这种通信。

的sooo ....

至于创建您自己的服务器端脚本,我会强烈建议反对它作为Python的框架采取PHP是建立在该层的位置。所以用Python自己创建符合标准的http服务器并不会很简单。之所以这么辛苦,是因为你不得不与CGI或WSGI(用于处理Web的Python标准)进行接口,或者创建自己的HTTP服务器。如果你认为你能胜任这个任务,那么我强烈建议!你可能会学到很多东西,但这不会是最简单的。伟大的事情是,很多图书馆已经为你处理这种沟通。例如,如果你正在寻找轻量级的东西,我强烈建议像flask这样的微型框架,如果我需要一些非常简单的东西,我个人会使用它。开始比django容易得多,但它也包含更少的电池。

希望这会有所帮助!

相关问题