扭曲的非默认根HTTP

时间:2016-11-27 01:54:44

标签: python twisted twisted.web

  1. 所以我希望所有的网址都以" / files"开头。

  2. 位于" localhost:3000 / files"的根页面将返回将共享的特定文件夹列表。默认共享不允许我限制要共享的文件夹。

  3. 我想在导航到文件夹时显示文件夹中的所有文件。使用" localhost:3000 / files / Documents"等URL。

  4. 我想以递归方式共享文件夹中的特定文件夹和文件。使用" localhost:3000 / files / Documents / Filename.pdf"这样的URL。

    from twisted.web.server import Site
    from twisted.web.resource import Resource
    from twisted.web.static import File
    from twisted.internet import reactor
    
    folder_list = ["Documents", "Downloads"]
    
    
    class RootPage(Resource):
        isLeaf = True
        def render_GET(self, request):
            print request.uri
            new_request = request.uri[7:]
            if len(new_request) <= 3:
                ret = ""
                for folders in folder_list:
                    ret += "<a href='%s'>%s</a></br>" % ("/files/" + folders.replace(" ", "-") , folders)
                return ret
    
    root = Resource()            
    #folders
    root.putChild('files', RootPage())
    
    for folders in folder_list:
        root.putChild( folders.replace(" ", "-"), File("/home/user1/" + folders))
    
    factory = Site(root)
    
    reactor.listenTCP(3000, factory)
    reactor.run()
    

1 个答案:

答案 0 :(得分:2)

问题

1)在.putChild()调用中,您将文件夹网址设置为根目录的子项,而不是/files的子项。

2)在RootPage班级定义中,您将isLeaf设置为True。但是您正在创建内部节点,而不是叶节点。

解决方案

删除isLeaf行,并将其他相关行更改为:

root = Resource()
rootpage = RootPage()
#folders
root.putChild('files', rootpage)

for folders in folder_list:
    rootpage.putChild( folders.replace(" ", "-"), File("/home/user1/" + folders))

factory = Site(root)