Есть ли торнадо-эквивалент SimpleHTTPServer? - PullRequest
1 голос
/ 20 марта 2012

Просматривая демонстрации , TornadoGists и другие фрагменты гисти (основываясь на этом предыдущем вопросе ), я не нашел любой код, эквивалентный SimpleHTTPServer из стандартной библиотеки в Python. Я ищу действительно маленький веб-сервер, который может обрабатывать параллельные запросы со всеми шаблонами, которые SimpleHTTPServer включает в себя для обслуживания файлов из каталога запуска.

1 Ответ

2 голосов
/ 21 марта 2012

ОБНОВЛЕНИЕ : начиная с Tornado 3, используйте встроенный StaticFileHandler .

Tornado не предназначен для обслуживания статических файлов. Если это приведет к загрузке, вы должны использовать nginx или что-то в этом роде. А если нет, возможно, будет проще использовать SimpleHTTPServer.

Тем не менее написать тривиально:

import os.path
import mimetypes

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

class FileHandler(tornado.web.RequestHandler):
    def get(self, path):
        if not path:
            path = 'index.html'

        if not os.path.exists(path):
            raise tornado.web.HTTPError(404)

        mime_type = mimetypes.guess_type(path)
        self.set_header("Content-Type", mime_type[0] or 'text/plain')

        outfile = open(path)
        for line in outfile:
            self.write(line)
        self.finish()

def main():
    tornado.options.enable_pretty_logging()
    application = tornado.web.Application([
        (r"/(.*)", FileHandler),
    ])
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()

Это только для начала; если вы собираетесь его использовать, вы должны убедиться, что не можете пройтись по файловой системе и получить доступ к любому файлу. Кроме того, скрипт в настоящее время обслуживает себя, что немного странно.

...