创建简单的python Web服务的最佳方法[关闭]
Posted
技术标签:
【中文标题】创建简单的python Web服务的最佳方法[关闭]【英文标题】:Best way to create a simple python web service [closed] 【发布时间】:2010-09-29 17:38:07 【问题描述】:我已经使用 python 多年了,但是我对 python web 编程的经验很少。我想创建一个非常简单的 Web 服务,它从现有的 python 脚本中公开一些功能,以便在我的公司内使用。它可能会以 csv 格式返回结果。最快的方法是什么?如果它影响您的建议,我可能会在此基础上添加更多功能。
【问题讨论】:
这显示了一个不错的快速示例:dreamsyssoft.com/blog/blog.php?/archives/… github.com/pramttl/webipy 我编写了这个工具,它可以自动将你的 python 函数转换为 web 端点。它对您的函数定义有一些限制,但它是迄今为止为您的 python 函数生成 Web 端点的最快方法。事实上,webipy 使用 django,但它会自动生成所有 python 函数所需的 django 视图。您不必编写任何“网络代码”。 【参考方案1】:原始 CGI 有点痛苦,Django 有点重量级。有许多更简单、更轻量级的框架,例如CherryPy。值得四处看看。
【讨论】:
CherryPy 的 +1。当您想要比 Django 更简单的东西时,它非常适合。【参考方案2】:如果您的意思是“Web 服务”,其他程序 SimpleXMLRPCServer 访问的东西可能适合您。自 2.2 版以来,每个 Python 安装都包含它。
对于简单的人类可访问的东西,我通常使用 Pythons SimpleHTTPServer,它也随每次安装一起提供。显然你也可以通过客户端程序访问 SimpleHTTPServer。
【讨论】:
【参考方案3】:查看WSGI reference implementation。你的 Python 库中已经有了它。这很简单。
【讨论】:
就像我说的,我在 python web 编程方面的经验非常有限,但是一个 WSGI 应用程序可以“独立”运行,而不需要像 apache 这样的 web 服务器,对吧? 是的。完全独立。效果很好。但是,如果没有 Apache 或特殊权限,您将无法使用端口 80——但这是一个操作系统安全问题。【参考方案4】:也许是扭曲的 http://twistedmatrix.com/trac/
【讨论】:
我对 Twisted 没有任何意见,但这正是我想要远离的(严重依赖)。 @Jeremy:Twisted 不重。 我同意乍一看可能有点令人生畏,但我不确定您所说的“重度依赖”是什么意思。据我所知,它使用来自标准 python 的包。模块内部有很多活动部件,但对于简单的事情你不需要做那么多。【参考方案5】:如果您指的是 SOAP/WSDL 意义上的“Web 服务”,您可能需要查看 Generating a WSDL using Python and SOAPpy
【讨论】:
我只是指最非正式意义上的“网络服务”。通过 http 提供将被其他应用程序使用的数据。正如我在问题中所说,它可能是 csv。 WSDL 可能是最基于标准的......而且那将是被消费的......【参考方案6】:看看werkzeug。 Werkzeug 最初是 WSGI 应用程序的各种实用程序的简单集合,现已成为最先进的 WSGI 实用程序模块之一。它包括一个强大的调试器、全功能的请求和响应对象、处理实体标签的 HTTP 实用程序、缓存控制标头、HTTP 日期、cookie 处理、文件上传、一个强大的 URL 路由系统和一堆社区贡献的插件模块。
它包含许多很酷的工具来处理 http,并且你可以在不同的环境(cgi、fcgi、apache/mod_wsgi 或简单的 Python 服务器进行调试)中使用它的优势。
【讨论】:
我最终为此使用了 werkzeug。我喜欢它的灵活性。谢谢推荐。 在接触到这个之前,我尝试了其他三个 Web 框架。这是我可以开箱即用的第一个。很棒的录音!【参考方案7】: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 - Internal Server Error 否则,我们的代码对我不起作用: ... app = web.application(urls, globals()) AttributeError: 'module' object没有属性“应用程序” 网站又回来了。您可能需要检查您的版本,因为 Tim 的代码看起来正确。 我也遇到了这个问题。如果您运行的是 Ubuntu,则 8.10 存储库中的版本已经过时了。从网站上获取最新版本或使用 easy_install,您应该会很成功。 根据 webpy.org(web.py 官方网站),yandex 正在使用 web.py(他们每天有 7000 万页面浏览量).. 所以它一定是高效的.. 这正是我所需要的。简单、直接且易于使用。【参考方案8】:在线获取 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 重点是在没有任何额外的网络服务器(如 apache)的情况下运行应用程序。【参考方案9】:如果你有一个好的网络框架,生活很简单。 Django 中的 Web 服务很简单。定义您的模型,编写返回 CSV 文档的视图函数。跳过模板。
【讨论】:
以上是关于创建简单的python Web服务的最佳方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
一旦我有一个 Java Web 服务器,通过浏览器查询数据库的最佳方法 [关闭]
熟悉 SQLAlchemy 的最简单方法/最佳教程是啥? [关闭]
创建一个 TOKEN 系统来验证 Web 服务调用的最佳方法是啥?