2016-11-27 7 views
2
  1. だから私はすべてのURLを "/ files"で始めるようにします。Twisted non default root HTTP

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

答えて

2

問題

1).putChild()コールでは、あなたはルートの子、/filesのない子としてフォルダのURLを確立します。

2)RootPageクラス定義では、isLeafTrueに設定します。しかし、葉ノードではなく内部ノードを作成しています。


ソリューション

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