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

jon*_*ham 4 python chat http tornado web

我正在使用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()
Run Code Online (Sandbox Code Playgroud)

访问http:// localhost:9999将引导我进入"网络聊天"处理程序(类网络聊天).但是,我想使用'webchat.py'访问同一目录中的其他文件,这些文件是webchat.css,webchat.html和webchat.js.

这个URL给了我404:http:// localhost:9999/webchat.html.这个问题的任何可能解决方案?

lep*_*ure 12

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

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

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

万一你错过了,这是一个例子

(r"/static/(.*)", web.StaticFileHandler, {"path": "/var/www"}),
Run Code Online (Sandbox Code Playgroud)

BTW,File_Name并且Handlers不被认为是在Python良好的变量名.


jon*_*ham 5

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

(1)给处理程序URL模式一个wildcat:

Handlers = [(r"/(.*)",webchat)]
Run Code Online (Sandbox Code Playgroud)

(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()      
Run Code Online (Sandbox Code Playgroud)