对于超级基本的http扭曲前端。 除非我告诉你,否则我怎么能确保没有回写任何HTML。
所以,我在下面有我的/ zoo网址。 对于任何回溯或“无此类资源”响应,我只想删除连接或返回空响应。
我想这是一个非常简单的但是无法弄清楚:) 我知道我可以通过没有我特定的Child路径来做到这一点,但是想要有效率地做,只想尽早放弃它。也许不使用Resource?
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)
答案 0 :(得分:2)
首先是一些基础
twisted.web的工作方式是
有一个名为Site的类,它是一个HTTP工厂。 每个请求都会调用此方法。事实上,调用一个名为getResourceFor的函数来获取将为此请求提供服务的适当资源。 此Site类使用root资源初始化。并且函数Site.getResourceFor在根资源上调用resource.getChildForRequest
呼叫流程为:
Site.getResourceFor - > resource.getChildForRequest(root资源)
现在是时候看看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(path)注册资源时,会发生什么,它们成为该资源的子资源。 一个例子:
root_resource
|
|------------ resource r1 (path = 'help')
|----resource r2 (path = 'login') |
| |----- resource r3 (path = 'registeration')
| |----- resource r4 (path = 'deregistration')
一些反思:
但是
对于解决方案:
您需要将Site子类化为
您必须创建自己的资源
def render(self, request):
request.setResponseCode(...)
return ""