Twisted 非默认根 HTTP
Twisted non default root HTTP
所以我想让所有的 url 都以“/files”开头。
位于 "localhost:3000/files" 的根页面将 return 将共享的特定文件夹列表。默认共享不允许我限制要共享的文件夹。
我想在导航到文件夹时显示文件夹中的所有文件。与 URL 一样 "localhost:3000/files/Documents"。
我想递归共享特定的文件夹和文件夹中的文件。与 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()
问题
1) 在 .putChild()
调用中,您将文件夹 URL 建立为根目录的子目录,而不是 /files
.
的子目录
2) 在 RootPage
class 定义中,您将 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)
所以我想让所有的 url 都以“/files”开头。
位于 "localhost:3000/files" 的根页面将 return 将共享的特定文件夹列表。默认共享不允许我限制要共享的文件夹。
我想在导航到文件夹时显示文件夹中的所有文件。与 URL 一样 "localhost:3000/files/Documents"。
我想递归共享特定的文件夹和文件夹中的文件。与 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()
问题
1) 在 .putChild()
调用中,您将文件夹 URL 建立为根目录的子目录,而不是 /files
.
2) 在 RootPage
class 定义中,您将 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)