创建简单的python网络服务的最佳方法


137

我已经使用python多年了,但是我对python Web编程的经验很少。我想创建一个非常简单的Web服务,该服务公开来自现有python脚本的一些功能以供公司使用。它可能会在csv中返回结果。什么是最快的方法?如果它影响您的建议,那么我很可能会在此之后添加更多功能。


这显示了一个很好的快速示例:dreamsyssoft.com/blog/blog.php?/archives/…
Triton Man

github.com/pramttl/webipy 我写了这个工具,它可以自动将您的python函数转换为Web端点。它对您的函数定义有一些限制,但这是迄今为止为python函数生成Web端点的最快方法。实际上,Webipy使用django,但它会自动生成所有python函数所需的django视图。您不必编写任何“ Web代码”。
Pranjal Mittal

Answers:


55

看看werkzeug。Werkzeug最初是WSGI应用程序各种实用程序的简单集合,现已成为最高级的WSGI实用程序模块之一。它包括功能强大的调试器,功能齐全的请求和响应对象,用于处理实体标签的HTTP实用程序,高速缓存控制标头,HTTP日期,cookie处理,文件上传,功能强大的URL路由系统和一堆由社区提供的附加模块。

它包括许多可与http配合使用的出色工具,并且具有可以在不同环境(cgi,fcgi,apache / mod_wsgi或用于调试的普通简单python服务器)中与wsgi一起使用的优点。


2
我最终为此使用了werkzeug。我喜欢它的灵活性。感谢您的推荐。
杰里米·坎特雷尔

1
在进入这个框架之前,我尝试了另外三个Web框架。这是我可以开箱即用的第一个工具。伟大的记录!
BenDundee 2015年

26

web.py可能是最简单的Web框架。“裸” CGI比较简单,但是在提供一项实际上可以做某事的服务时,您完全是一个人。

“你好,世界!” 根据web.py是不是比裸CGI版本更长的时间,但它增加了URL映射,HTTP命令的区别,和查询参数解析为免费

import web

urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:        
    def GET(self, name):
        if not name: 
            name = 'world'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
    app.run()

是的,web.py似乎很棒。到目前为止,网站< webpy.org >表示:500-内部服务器错误否则,我们的代码对我不起作用:... app = web.application(urls,globals())AttributeError:'module'对象没有属性“应用程序”
bortzmeyer

1
该网站回来了。您可能要检查您的版本,因为Tim的代码看起来正确。
查理·马丁

1
我也遇到了这个。如果您正在运行Ubuntu,则8.10存储库中随附的版本已经过时。从网站上获取最新消息,或使用easy_install,您应该会心满意足。
bouvard

根据webpy.org(官方web.py网站)的说法,yandex使用的是web.py(每天有7000万页面浏览量)..因此它必须高效。.–
程序员

这正是我所需要的。简单,直接,易于使用。
GuiSim 2012年

15

在线获取Python脚本的最简单方法是使用CGI:

#!/usr/bin/python

print "Content-type: text/html"
print

print "<p>Hello world.</p>"

将该代码放入驻留在Web服务器CGI目录中的脚本中,使其可执行并运行。cgi当您需要接受用户的参数时,该模块具有许多有用的实用程序。


执行此方法时,请确保已针对Apache中的python脚本正确设置了处理程序,例如:AddHandler cgi-script .cgi .pl .py
Tegan Snyder,

1
关键是要在没有任何其他网络服务器(如apache)的情况下运行应用程序。
AstraSerg

12

原始CGI有点痛苦,Django有点重量级。关于它,有许多更简单,更轻便的框架,例如CherryPy。值得一看。


2
为CherryPy +1。当您想要比Django更简单的东西时,它是完美的选择。
史蒂夫·洛斯

9

看一下WSGI参考实现。您已经在Python库中拥有它。这很简单。


就像我说的那样,我在python网络编程方面的经验非常有限,但是WSGI应用程序可以“独立”运行,而无需像apache这样的网络服务器,对吗?
杰里米·坎特雷尔

是。完全独立。效果很好。但是,如果没有Apache或特殊特权,就不能使用端口80-但这是操作系统的安全问题。
S.Lott

4

如果您指的是“ Web服务”,则其他程序SimpleXMLRPCServer可能访问了某些 适合您的东西。自版本2.2起,所有Python安装中均包含该功能。

对于简单的人类可访问的东西,我通常使用Python的SimpleHTTPServer,它也随每次安装一起提供。显然,您还可以通过客户端程序访问SimpleHTTPServer。


2

如果您拥有一个好的Web框架,生活将会很简单。Django中的Web服务很简单。定义模型,编写返回CSV文档的视图函数。跳过模板。


2

如果您用SOAP / WSDL表示“ Web服务”,则可能需要看一下 使用Python和SOAPpy生成WSDL


我只是在最非正式的意义上指“ Web服务”。通过http提供的数据将被其他一些应用使用。正如我在问题中所说的,它很可能是csv。
杰里米·坎特雷尔

WSDL可能是基于最标准的……并且将被使用……
Thufir

1

也许是扭曲的 http://twistedmatrix.com/trac/


我没有任何反对Twisted的东西,但这恰恰是我想要远离(繁重的依赖)的东西。
杰里米·坎特雷尔

@杰里米:扭曲不重。
nosklo

我同意乍一看可能会有些令人生畏,但我不确定您所说的“沉重的依赖关系”是什么意思。据我所知,它使用标准python的软件包。模块内部有很多活动部件,但是对于简单的事情,您不需要做那么多。
mabbit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.