2010-03-07 155 views
7

我想获得有关将python脚本作为网页提供服务的最佳方式的建议。通常情况下,我希望我和我的同事能够以最少的努力编写简单的网页,即我们专注于业务逻辑,例如创建简单表单等等。可能通过某种方式来管理会话,但这是一件很不错的事情。它不一定是所见即所得,因为它们是开发者,但我们很忙,不想花太长时间将想法变为现实。这是为了内部使用,所以外观不是最重要的。Python Web服务器的Web服务器框架

启用此功能所需的软件应易于设置和配置。例如添加新的目录和python lib dirs应该很容易。

我的第一个直觉是使用mod_python的apache或tomcat。欢迎任何意见/建议。提前致谢。

编辑 - 在谷歌搜索我偶然发现了jython,并试图在tomcat中。它似乎快速加载页面,但从命令行花费一个年龄。这可能是一种选择。用jython servlets编写演示文稿,并将所有脚本从命令行或Web应用程序中分开使用,以便可以使用vanilla python运行。另外作为一个java商店,这提供了一个桥梁进入我们的罐子。任何人都想谈谈我:-)?

回答

14

新标准是WSGI(Web服务器网关接口),它支持Apache的mod_wsgi

Web服务器网关接口 定义Web服务器和Web应用程序 或框架的 Python编程语言之间的简单和通用 接口。

最流行的Python Web框架支持WSGI(DjangoPylonsCherryPy,...)。
这些框架可以帮助您快速开发您的应用程序。

对于非常简单的应用,您可以使用CherryPyHere是一个快速你叫什么名字的例子。

+0

好,很好。根据文件的输入和执行o/s级别命令,最简单的页面是最快的 - 我认为我们甚至不需要db连接。 – Ben 2010-03-07 22:00:41

3

Django一看。

从网站:

“ Django是一个高层次的Python Web框架,鼓励快速发展和清洁,务实的设计”

-1

另请参阅pinax。它建立在DJango之上,它将为您的网站带来良好的开端。

7

这些类型的问题通常会导致每个人都知道的python web框架被提及一次或两次。正如Desintegr指出的那样,wsgi是python web应用程序的标准接口。但是,如果您的口味太低,我建议您使用pyramid。这是一个简单的网络应用程序直接从documentation。没有快速入门需要。

from pyramid.config import Configurator 
from pyramid.response import Response 
from paste.httpserver import serve 

def hello_world(request): 
    return Response('Hello world!') 

def goodbye_world(request): 
    return Response('Goodbye world!') 

if __name__ == '__main__': 
    config = Configurator() 
    config.add_view(hello_world) 
    config.add_view(goodbye_world, name='goodbye') 
    app = config.make_wsgi_app() 
    serve(app, host='0.0.0.0') 

美是pyramid如果需要,可以很好地扩展到most complex applications。并没有自以为是,因此它非常灵活。

如果pyramid太抽象了,我会推荐webob,你可以把它看作是在wsgi规范之上的一个非常简单的抽象。

+2

+1 BFG。它的座右铭:“支付你吃的东西”意味着如果你真的不关心在太阳下做什么事情(如Django或Turbogears),你不必导入它。 这可能是OP的完美框架:刚好够用,所以你不需要关心WSGI,但实际上它听起来像你不需要其他东西。 – RyanWilcox 2010-03-08 02:20:11

+0

更新了我对金字塔的答案,因为bfg现在已经被这个和部分塔架项目所知晓。 – 2011-01-29 15:04:08

-1

您可以试用Spyce

Spyce是一种支持优雅高效的服务器端语言 基于Python的动态HTML生成。 Spyce允许在 页面中嵌入Python,类似于JSP嵌入Java的方式,但Spyce远不止是一个JSP 克隆。开箱即用,Spyce提供的开发速度与Rails等其他现代框架一样快速,但具有凝聚力的设计,而不是特殊情况的恶作剧。

Spyce的模块化设计使其非常灵活和可扩展。它也可以用作命令行工具,用于静态文本预处理 或作为Web服务器代理。

Spyce的性能与其他同类解决方案相当。

0

您可以通过运行Tornado(tornadoweb.org)来避免mod_python和mod_wsgi。这是friendfeed使用的服务器。因此,将一个URL映射到一个类,然后创建一个定义get()/ post()方法的类(或者任何您想要支持的HTTP方法),以及“像运行普通的python应用程序一样运行它”。龙卷风是网络服务器,并有一个非常简单的“框架”的基本要素。查看演示。我在一些项目中使用django,但我也使用Tornado,并且我认为如果你的应用程序非常简单,并且你需要在昨天完成某些工作,那么学习曲线现在在Tornado中并不像繁重是与Django。

也就是说,Django有很棒的文档,如果你有时间学习它,那么收益就在那里。

5

实际上,这听起来像这可能是一个很好的用例为bottle

示例代码做了

from bottle import route, run 

@route('/') 
def index(): 
    return 'Hello World!' 

run(host='localhost', port=8080) 
0

你可以试试Appier(https://github.com/hivesolutions/appier)。下面是一个示例应用程序:

import appier 

class HelloApp(appier.App): 

    @appier.route("/", "GET") 
    def hello(self): 
     return "Hello World" 

HelloApp().serve() 

这里是你如何运行:

pip install appier 
python hello.py 

免责声明:这个框架是我公司的开源产品组合的一部分。我们建立了框架,使我们的咨询工作的代码尽可能简单和干净(以提高我们的效率)。该项目非常活跃,因为我们一直在使用该框架,但是,需要注意的是,我们最近才公开讨论它,所以目前还没有社区。但是,出于这个原因,我们非常乐意与早期的鸟类开发者密切合作,改进我们的文档并添加新的功能。