2009-10-07 471 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實例的用戶,或者您是否有一些控制措施來更改其全局配置文件並重新啓動它。這將決定你可以做什麼和使用什麼。