如何在Tornado中处理对文件的HTTP GET请求?

时间:2012-03-02 09:48:29

标签: python http web chat tornado

我正在使用Ubuntu并且有一个名为“webchat”的目录,在这个目录下有4个文件:webchat.py,webchat.css,webchat.html,webchat.js。

使用Tornado创建HTTP服务器时,我将根(“/”)映射到我的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.py'访问同一目录中的其他文件,这些文件是webchat.css,webchat.html和webchat.js。

此网址为我提供了404:http://localhost:9999/webchat.html。 这个问题的任何可能的解决方案?

2 个答案:

答案 0 :(得分:12)

Tornado有一个默认的静态文件处理程序,但它将url映射到/ static /,如果你必须访问/static/webchat.css中的静态文件,它会没问题吗?

如果您对此感到满意,我强烈建议您以这种方式处理静态文件。

如果您希望静态文件位于根路径,请查看web.StaticFileHandler。

如果你错过了,这是一个例子

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

BTW,File_NameHandlers在Python中不被视为好的变量名。

答案 1 :(得分:5)

仅包含文件名和相对路径的简单文件请求的解决方案:

(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()