构建响应Ajax请求的PHP脚本非常简单:
<?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.使用第三方框架的方法应该是什么(对吧?)一个非常简单的任务。
有任何帮助吗?如何做到这一点的一个例子将非常感激。
答案 0 :(得分:13)
但是使用Python并不是那么简单。或者至少我还没弄明白如何让它如此简单。如果我只是尝试“打印”一个响应(与上面的PHP的“echo”语句并行),那么客户端就不会得到任何回复。
我可能有一些细节错误,但我会试着解释为什么会这样。首先,您正在谈论的PHP直接烘焙到apache webserver中。当您执行echo
时,它会将结果输出到响应流(服务器和客户端之间的TCP连接)。当您在python中执行print
时,您正在做的是将结果输出到标准输出(命令行)。
大多数语言如何与Web一起工作,是请求进入某种Web服务器,并且该Web服务器执行程序。该程序负责返回Web服务器所采用的流,并通过TCP连接流式传输到客户端。
我假设网络服务器将PHP标准重定向到webservers流,这就是PHP能够使用echo
返回其结果的方式。这是例外,而不是规则。
因此,要使用python来处理请求,您需要一个可以某种方式执行python的Web服务器。这通常使用CGI完成。最近,像mod_python
这样的东西被用来在apache中托管python。如今,使用wsgi
或mod_wsgi
,这是为与python交谈的web服务器定义的标准。
您可能希望查看类似web.py的内容,这是一个极简主义的python Web框架。这将使你非常接近你想要做的事情。
答案 1 :(得分:4)
PHP从一开始就是以网络为基础构建的。相比之下,Python被设计为通用语言。
当您从PHP回显时,您实际上正在写入作为HTTP响应的一部分发送给用户的流。当您在python中执行打印时,默认情况下,输出将写入stdout流,这意味着不是通过http发送给用户,而是将输出写入控制台(或者此时正在捕获stdout的任何内容)。
因此对于PHP来说,HTTP是一流的公民。对于更通用的语言,如Python,Ruby,Erlang,C,C ++和许多其他语言。您必须以不同的方式与HTTP通信。 PHP已经通过apache的mod_php或PHP-FPM之类的东西来处理这种通信。
...的sooo
至于创建自己的服务器端脚本,我强烈反对它,因为Python的Frameworks取代了构建PHP的层。因此,使用Python自己创建符合标准的http服务器并不会非常简单。这很难的原因是您要么必须与CGI或WSGI(用于处理Web的Python标准)接口,要么创建自己的HTTP服务器。如果您认为自己完成了任务,那么我强烈建议您这样做!你可能通过这样做可以学到很多东西,但这不是最简单的事情。最棒的是,很多图书馆已经为您处理这种沟通。例如,如果你正在寻找轻量级的东西,我强烈建议使用像flask这样的微框架,如果我需要一些非常简单的东西,我会亲自使用它。它比django更容易上手,但它也包含更少的电池。
希望这有帮助!
答案 2 :(得分:2)
有一个名为json的python模块。也许有很多答案涉及框架(如Django),因为json是以网络为中心的,Django,龙卷风,扭曲,樱桃等等都是python与网络交互的手段。
有许多不同的方法可以做到这一点,并在其他问题中解决这些问题。但是,为了回答你的问题,python有一个json library in its standard library。
答案 3 :(得分:0)
大多数PHP安装程序默认配置自己通过运行脚本来提供web目录中的php文件。大多数Python安装程序都没有。使用apache服务Python的最快方法:
AddHandler cgi-script .py
添加到任何已经可以提供PHP文件的块import cgi
如果您想要做一些比回发回复更复杂的事情。 请注意,这不是运行python网站的推荐方式,只是 fast,php-ish方式。
答案 4 :(得分:0)
Richardhsu的要点是正确的。
基本上python是一种通用脚本语言。因此,它需要一种连接到Web的方法,例如通过打开端口和进行网络编程等。您还可以使用CGI附加到apache或其他Web服务器。
这与Java,Ruby,Perl或C / C ++如何进入网络并没有什么不同。事实上,PHP做了很多相同的事情。它与Web服务器的接口比CGI更紧密。
如果您要从命令行解释或编译PHP,那么您将遇到与Python现在完全相同的问题。问题不是PHP与Python,而是使用HTTP协议将您选择的脚本语言附加到Internet上。