覆盖来自Twisted.web的所有默认资源/响应

覆盖来自Twisted.web的所有默认资源/响应

问题描述:

对于超基本的http扭曲前端。 我怎样才能确保没有HTML写回,除非我告诉它。覆盖来自Twisted.web的所有默认资源/响应

所以,我有我/动物园网址下面。 对于任何回溯,或'没有这样的资源'的回应,我想删除连接或返回一个空的回应。

我想这是一个超级简单的,但无法弄清楚:) 我知道我可以做到这一点,没有我的具体儿童路径,但想要做到这一点高效率,只是想放弃它作为尽可能早..也许不使用资源?

class HttpApi(resource.Resource): 
    isLeaf = True 
    def render_POST(self, request): 
     return "post..." 


application = service.Application("serv") 

json_api = resource.Resource() 
json_api.putChild("zoo", HttpApi()) 
web_site = server.Site(json_api) 
internet.TCPServer(8001, web_site).setServiceParent(application) 

一些基础知识第一

twisted.web的工作原理是

有一个叫Site类,这是一个HTTP工厂的方式。 这是为每个请求调用的。实际上,调用一个名为getResourceFor的函数来获取将提供此请求的适当资源。 本网站类使用根资源进行初始化。而根资源Site.getResourceFor调用resource.getChildForRequest功能

呼叫流程是:

Site.getResourceFor - > resource.getChildForRequest(根资源)

现在是时候看看在getChildForRequest:

def getChildForRequest(resource, request): 
    """ 
    Traverse resource tree to find who will handle the request. 
    """ 
    while request.postpath and not resource.isLeaf: 
     pathElement = request.postpath.pop(0) 
     request.prepath.append(pathElement) 
     resource = resource.getChildWithDefault(pathElement, request) 
    return resource 

会发生什么是因为资源注册与putChild(路径),他们成为奇尔该资源的资源。 一个例子:

root_resource 
| 
|------------ resource r1 (path = 'help') 
|----resource r2 (path = 'login') | 
|         |----- resource r3 (path = 'registeration') 
|         |----- resource r4 (path = 'deregistration') 

的一些思考:

  1. 现在R1将与路径服务器请求http://../help/
  2. 现在R3将与路径服务器请求http://../help/registration/
  3. 现在R4将与路径http://../help/deregistration/服务器请求

  1. R3将与路径服务器请求http://../help/registration/xxx/
  2. R3将与路径http://../help/registration/yyy/

对于解决服务器的请求:

您需要继承站点到

  1. 检查如果路径excatly匹配与pathElement资源返回空,然后才处理它或
  2. 回报,这将是你的处理程序来处理其他方面

您必须创建自己的资源的资源

def render(self, request): 
    request.setResponseCode(...) 
    return ""