Как обработать HTTP-запрос GET к файлу в Tornado? - PullRequest
4 голосов
/ 02 марта 2012

Я использую Ubuntu и у меня есть каталог с именем "webchat", в этом каталоге есть 4 файла: webchat.py, webchat.css, webchat.html, webchat.js.

При созданииHTTP-сервер, использующий Tornado, я сопоставляю корень ("/") с моим кодом на python: 'webchat.py' следующим образом:

import os,sys
import tornado.ioloop
import tornado.web
import tornado.httpserver

#http server for webchat
class webchat(tornado.web.RequestHandler):
  def get(self):
    self.write("Hello, chatter! [GET]")
  def post(self):
    self.write("Hello, chatter! [POST]")

#create http server
Handlers     = [(r"/",webchat)]
App_Settings = {"debug":True}
HTTP_Server  = tornado.web.Application(Handlers,**App_Settings)

#run http server
HTTP_Server.listen(9999)
tornado.ioloop.IOLoop.instance().start()

Доступ к http://localhost:9999 приведет меня к 'webchatОбработчик (класс веб-чата).Однако я хочу получить доступ к другим файлам в том же каталоге с помощью 'webchat.py', это webchat.css, webchat.html и webchat.js.

Этот URL дает мне 404: http://localhost:9999/webchat.html. Какие-нибудь возможные решения в этом вопросе?

Ответы [ 2 ]

12 голосов
/ 09 марта 2012

Tornado имеет обработчик статических файлов по умолчанию, но он отображает URL-адрес в / static /, будет ли это нормально, если вам нужен доступ к статическому файлу в /static/webchat.css?

Если вы согласны с этим, я настоятельно рекомендую вам обрабатывать статические файлы таким образом.

Если вы хотите, чтобы ваш статический файл находился в корневом каталоге, взгляните на web.StaticFileHandler.

Если вы пропустили это, вот пример

(r"/static/(.*)", web.StaticFileHandler, {"path": "/var/www"}),

Кстати, File_Name и Handlers не считаются хорошими именами переменных в Python.

5 голосов
/ 02 марта 2012

Решение для простого запроса файла с указанием только имени файла и относительного пути:

(1) Присвойте шаблон URL обработчика подстановочный знак:

Handlers = [(r"/(.*)",webchat)]

(2) Передать параметр, представленный (. *), Методам get и post:

def get(self,File_Name):
  File = open(File_Name,"r")
  self.write(File.read())
  File.close()

def post(self,File_Name):
  File = open(File_Name,"r")
  self.write(File.read())
  File.close()      
...