Простой веб-сайт с python с помощью SimpleHTTPServer и SocketServer, как отображать только html-файл, а не весь каталог?
как я могу отображать только simplehttpwebsite_content.html
когда я посещаю localhost:8080
? Так что я не вижу свой файл, только веб-страницу. Все эти файлы находятся в одном каталоге btw.
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;}
3 ответов
вы можете продлить SimpleHTTPServer.SimpleHTTPRequestHandler
и переопределить do_GET
способ заменить self.path
С simplehttpwebpage_content.html
если /
запрос.
#!/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.SimpleHTTPRequestHandler
выходит BaseHTTPServer.BaseHTTPRequestHandler
, вы можете прочитать их документы, чтобы понять, какие методы и переменные экземпляра доступны и как вы можете ими манипулировать.
вы можете найти path
переменная, упомянутая в документации BaseHTTPServer.BaseHTTPRequestHandler
. Вы можете найти do_GET()
метод, упомянутый в документации SimpleHTTPServer.SimpleHTTPRequestHandler
.
вот некоторые выходные данные из моей оболочки, чтобы показать, что происходит, когда я запускаю эту программу, а затем пытаюсь получить доступ http://localhost:8080/
susam@swift:~/so$ ls
simplehttpwebpage_content.html simplehttpwebpage.py simplehttpwebsite_style.css
susam@swift:~/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 -
вы должны вызвать свой файл index.html
, Это страница, которая обслуживается автоматически, а не перечисляет каталог.
другой возможностью было бы переопределить обработчики list_directory(self, path)
метод.
основываясь на ответе Susam Pal, вот моя реализация, которая позволяет установить порт (так же, как при запуске 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()