2009-10-07 439 views
7

最有可能这是一个愚蠢的问题,那些谁知道答案,但我是一个初学者,在这里它:Python:如何在网页上显示结果?

我有一个Python脚本,我运行在一个命令行与一些参数,它打印出一些结果。假设结果是一些HTML代码。我需要一个页面(好吧,我知道如何上传文件到服务器,Apache正在运行,Python已经安装了)。服务器...)和一个编辑字段,它将接受该参数和提交按钮,并且我需要它在用户提交适当的参数后在网页上“打印”结果,或者显示任何输出命令行情况被打印。

我读过Dive Into Python的关于“HTML处理”和“HTTP Web服务”的章节,但他们没有描述我在找什么。

如果答案并不简短,我会非常感激链接到更相关的东西阅读或可能是谷歌的关键词。

回答

2

听起来像你只需要启用CGI on apache,这几乎将您的输出重定向到Web服务器输出。

Python确实有CGI library你可以看看它。

下面是一个essay by Guido(有点过时)

而一个interactive instruction,看起来很有希望。

p.s.

也许你可能还希望看到谷歌的祭此Google app engine(它可能不是你想要什么,虽然)

+0

也有很多例子。还有很多框架。我不知道是否有人仍然使用这个,但我曾经使用Python的“扭曲”框架来开发Web应用程序。很多人使用很多东西,包括Django。从哪儿开始?可能奥斯卡说要开始的地方。 – 2010-04-15 15:11:43

1

对不起,但HTTP网络服务你在找什么。想想这样 - 你在网页上放置一个表单,并提交一个按钮。这涉及到一个Web服务,该服务接受请求,并咀嚼该请求,并返回一个响应 - 这是一个html页面。你永远不必真的保存的HTML,它始终是动态生成的,但它仍然是一个有效的HTML页面。

看看django http://www.djangoproject.com/为高质量的基于python的web服务工具包。

理解请求/响应习惯的第一步是将请求视为特定格式(由CGI定义 - 即它是GET或POST HTML操作)命令行参数集,响应作为特定格式的输出(HTML)发送,而不是标准输出,而是通过“电线”连接到某个浏览器。通过网络发送请求并使用一些参数执行脚本,并接收输出 - 您的格式化HTML页面。

+2

对于这种类型的问题,Django确实看起来像是矫枉过正...... – Hortitude 2009-10-07 21:09:54

+0

对评论者说“过度杀伤”+1。 – 2010-04-15 15:11:07

4

对于这样一个简单的任务,你可能不需要超过CGI。幸运的是,Python有一个内置的cgi模块,它应该可以做你想做的。

或者你可以看看一些最小的web框架,如web.py

0

我与马特完全一致 - Django是你想要的。Django提供了一个完整的解决方案,以及非常精彩的文档,可以帮助你解决问题。如果你的应用程序变得越来越复杂,Django仍然可以工作。 Django甚至适用于非常大而且非常复杂的网站。

看看免费书籍,The Django Book

Django的另一个优点是:如果您在Django中执行您的Web应用程序,则可以将它移植到Google App Engine。

+3

那么投票亚光了吗?为什么第二个答案。 – 2010-04-15 15:10:49

+0

@Warren P,我提供了第二个答案,因为我想说一些Matt没有说的话。我的意思是,比较我的答案和他的;他们很不相同。我承认他首先回答了这个问题,因为我并没有试图欺骗任何人,而不是马特 - 我只是想帮助他。也许你觉得我的回答没有任何用处;如果是这样,我建议你降温我。 – steveha 2010-04-16 01:04:01

+0

对于这里的社区来说这是一个严肃的问题:是否已经更好地使用StackOverflow方式进入Matt的回答并开始编辑它以添加我的其他要点?到目前为止,我还没有编辑其他答案,除非他们包含错误或需要修复的代码。把我的想法与别人的想法混合起来似乎是错误的,而我却认为正确的做法是发布我自己的答案。我做错了吗? – steveha 2010-04-16 18:16:36

0

我没有读过潜水到PYTHON,所以也许我说的是多余的。正如丹尼尔所说,CGI可能会为你工作。这些日子,这只会是一个简单的东西,只有很少的命中。 Python CGI模块记录在here。我一直使用该模块进行表单处理,并且只是完成输出的打印。尽我所能了解,这是通常的做事方式,但我没有用Python做过很多CGI。

你不会说你在做什么,所以我会说明什么是显而易见的:确保你告诉服务器,你输出的网页的第一个输出是内容类型后面是一个空行。通常这是与完成:

print "Content-Type: text/html" 
print 

(对于Python 2,3,你需要让你的打印成函数调用。)在此之后,打印您的HTML,头部,身体等标签和实际内容。

0

A 当前创建简单(一)Python网页服务器的方法是wsgiref module

wsgiref是WSGI规范的参考实现,可用于将WSGI支持添加到Web服务器或框架。

查看一些SO qusetionshttps://stackoverflow.com/search?q=[python]+wsgiref)的一些代码示例和更多建议。

wsgiref example是一个良好的开端:

from wsgiref.simple_server import make_server 

def hello_world_app(environ, start_response): 
    status = '200 OK' # HTTP Status 
    headers = [('Content-type', 'text/plain')] # HTTP Headers 
    start_response(status, headers) 

    # The returned object is going to be printed 
    return ["Hello World"] 

httpd = make_server('', 8000, hello_world_app) 
print "Serving on port 8000..." 

# Serve until process is killed 
httpd.serve_forever() 
+0

wsgi被认为比cgi“更好”,主要是由于生产应用程序的可扩展性,对吗?对于任何微不足道的“用户”应用程序,CGI都可以。从学习CGI开始,然后转向wsgi,这不是一个糟糕的地方,对吧? – 2010-04-15 15:13:06

+0

我认为WSGI的例子很简单 - 这是一个与CGI类似的复杂选项。 – gimel 2010-04-15 16:27:55

2

谁的Web服务器?如果它是由Web托管公司或其他人提供的Web服务器,并且您无法控制它,则需要确定它们以何种方式支持使用Python编写Web应用程序。仅仅知道他们拥有Python是不够的。

正如其他人指出的,可能至少会支持使用Python的CGI脚本。但是,CGI对于运行大型Python Web框架(如Django)并不实际。

虽然Web服务器可能也支持FASTCGI,如果是这种情况,可以使用如此大的Python Web框架,因为FASTCGI使用持久化进程,CGI为每个请求创建一个进程,其中大型Python Web框架的开销通常会导致CGI的使用不切实际。

如果Apache服务器由其他人使用独立的Python Web服务器(如wsgiref)控制,并且从Apache进行代理将无法执行,因为您无法设置Apache来执行此操作。

因此,了解如何支持Python for web应用程序的使用,并确定您是否仅仅是Apache实例的用户,或者您是否有一些控制措施来更改其全局配置文件并重新启动它。这将决定你可以做什么和使用什么。

相关问题