2016-11-27 57 views
2
  1. 所以我想所有的網址都以「/ files」開頭。扭曲的非默認根HTTP

  2. 位於「localhost:3000/files」的根頁面將返回將被共享的特定文件夾列表。默認分享不允許我限制要共享的文件夾。

  3. 我想在導航到文件夾時顯示文件夾中的所有文件。 URL爲「localhost:3000/files/Documents」。

  4. 我想遞歸地共享文件夾中的特定文件夾和文件。 URL爲「localhost:3000/files/Documents/Filename.pdf」。

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

回答

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) 
+0

作品完美的感謝。 – GeneralZero