2012-05-15 1 views
9

localhost:8080にアクセスしたときにsimplehttpwebsite_content.htmlと表示するにはどうすればよいですか?私が自分のファイルツリーを見ることができないように、ウェブページだけ。これらのファイルはすべて同じディレクトリにあります。SimpleHTTPServerとSocketServerを使ったPythonを使ったシンプルなWebサイトですが、ディレクトリ全体ではなくhtmlファイルのみを表示する方法はありますか?

simplehttpwebsite.py

#!/usr/bin/env python 
import SimpleHTTPServer 
import SocketServer 

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler 
server = SocketServer.TCPServer(('0.0.0.0', 8080), Handler) 

server.serve_forever() 

simplehttpwebsite_content.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html> 
    <head> 
    <link rel="stylesheet" type="text/css" href="simplehttpwebsite_style.css"> 
    </head> 

    <body> 
    This is my first web page 
    </body> 
</html> 

simplehttpwebsite_style.css

body{background-color:blue;} 

答えて

20

あなたはSimpleHTTPServer.SimpleHTTPRequestHandlerを拡張し、/が要求された場合simplehttpwebpage_content.htmlself.pathを置き換えるためにdo_GETメソッドをオーバーライドすることができます。

#!/usr/bin/env python 
import SimpleHTTPServer 
import SocketServer 

class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self): 
     if self.path == '/': 
      self.path = '/simplehttpwebpage_content.html' 
     return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) 

Handler = MyRequestHandler 
server = SocketServer.TCPServer(('0.0.0.0', 8080), Handler) 

server.serve_forever() 

SimpleHTTPServer.SimpleHTTPRequestHandlerBaseHTTPServer.BaseHTTPRequestHandlerを拡張するので、あなたは変数が利用可能なメソッドとインスタンスとあなたがそれらを操作する方法を理解するために彼らのドキュメンテーションを読むことができます。

に記載されているpath変数があります。 のドキュメントに記載されているdo_GET()メソッドがあります。ここで

が、私はこのプログラムを実行し、その後、私はSusamパルの答えに​​

[email protected]:~/so$ ls 
simplehttpwebpage_content.html simplehttpwebpage.py simplehttpwebsite_style.css 
[email protected]:~/so$ python simplehttpwebpage.py 
swift - - [19/Apr/2012 09:10:23] "GET/HTTP/1.1" 200 - 
swift - - [19/Apr/2012 09:10:26] "GET /simplehttpwebsite_style.css HTTP/1.1" 200 - 
+0

あなたの 'return'は関数内にありません。関数(メソッド)の中にreturn文を置いても、404エラーが出ます。 – Bentley4

+0

申し訳ありませんがBentley4、それはタイプミスでした。私は今それを修正しました。 'python simplehttpwebpage.py'を実行しているコンソールにエラーがありますか? 'simplehttpwebpage_content.html'は、このスクリプトを実行しているディレクトリと同じディレクトリにある必要があります。 –

+0

私はsimplewebpage_content.htmlの代わりにsimplewebsite_content.htmlを書きました。 :)。今すぐ動作します。 – Bentley4

10

あなたのファイルindex.htmlを呼び出す必要があり、それが自動的に提供の代わりますページですディレクトリを一覧表示します。

他の可能性は、ハンドラlist_directory(self, path)メソッドをオーバーライドすることです。

+0

なぜ誰かが答えを落としたのか分かりません。あなたの答えは便利です。 – Bentley4

0

ビルにアクセスしようとすると何が起こるかを示すために私のシェルからいくつか出力され、ここでポートがあることを可能にする私の実装があります(あなたがpython -m SimpleHTTPServer 8080を実行したときと同じように)設定され、ファイルが.html拡張子なしでファイルサーバー上に存在する場合、htmlページを提供します。

#!/usr/bin/env python 
import SimpleHTTPServer 
import SocketServer 
import os.path 
import sys 

class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self):    
     possible_name = self.path.strip("/")+'.html' 
     if self.path == '/': 
      # default routing, instead of "index.html" 
      self.path = '/simplehttpwebpage_content.html' 
     elif os.path.isfile(possible_name): 
      # extensionless page serving 
      self.path = possible_name 

     return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) 

Handler = MyRequestHandler 

port = 8000 
if len(sys.argv) > 1: 
    try: 
     p = int(sys.argv[1]) 
     port = p 
    except ValueError: 
     print "port value provided must be an integer" 

print "serving on port {0}".format(port) 
server = SocketServer.TCPServer(('0.0.0.0', port), Handler) 
server.serve_forever() 
関連する問題