Пользовательский простой Python HTTP-сервер не обслуживает CSS-файлы - PullRequest
6 голосов
/ 04 июня 2009

Я нашел написанный на python, очень простом http-сервере, метод do_get выглядит так:

def do_GET(self):
        try:
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers();
            filepath = self.path
            print filepath, USTAW['rootwww']

            f = file("./www" + filepath)
            s = f.readline();
            while s != "":
                self.wfile.write(s);
                s = f.readline();
            return

        except IOError:
            self.send_error(404,'File Not Found: %s ' % filepath)

Работает нормально, кроме того факта, что он не обслуживает никакие CSS-файлы (он отображается без CSS). Кто-нибудь получил предложение / решение для этой причуды?

С уважением, praavDa

Ответы [ 3 ]

9 голосов
/ 04 июня 2009

Вы явно обслуживаете все файлы как Content-type: text/html, где вам нужно обслуживать файлы CSS как Content-type: text/css. Смотрите эту страницу в CSS-Discuss Wiki для подробностей. Веб-серверы обычно имеют справочную таблицу для сопоставления расширения файла с Content-Type.

6 голосов
/ 04 июня 2009

похоже, что он возвращает html mimetype для всех файлов:

self.send_header('Content-type', 'text/html')

Кроме того, это выглядит довольно плохо. Почему вы заинтересованы в этом отстойном сервере? Посмотрите на cherrypy или paste для хороших реализаций Python HTTP-сервера и хорошего кода для изучения.


РЕДАКТИРОВАТЬ : Попытка исправить это для вас:

import os
import mimetypes

#...

    def do_GET(self):
        try:

            filepath = self.path
            print filepath, USTAW['rootwww']

            f = open(os.path.join('.', 'www', filepath))

        except IOError:
            self.send_error(404,'File Not Found: %s ' % filepath)

        else:
            self.send_response(200)
            mimetype, _ = mimetypes.guess_type(filepath)
            self.send_header('Content-type', mimetype)
            self.end_headers()
            for s in f:
                self.wfile.write(s)
2 голосов
/ 04 июня 2009

См. SimpleHTTPServer.py в стандартной библиотеке для более безопасной и разумной реализации, которую вы можете настроить при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...