Python 扭曲的 putChild 没有按预期转发
Python twisted putChild not forwarding expectedly
代码在这里。
from twisted.web.static import File
from twisted.web.server import Site
from twisted.web.resource import Resource
from twisted.internet import ssl, reactor
from twisted.python.modules import getModule
import secure_aes
import urllib.parse
import cgi
import json
import os
import hashlib
import coserver
import base64
import sim
if not os.path.exists(os.path.join(os.getcwd(),'images')):
os.mkdir(os.path.join(os.getcwd(),'images'))
with open ('form.html','r') as f:
fillout_form = f.read()
with open ('image.html','r') as f:
image_output = f.read()
port = 80#int(os.environ.get('PORT', 17995))
class FormPage(Resource):
#isLeaf = True
def getChild(self, name, request):
print('GC')
if name == '':
return self
return Resource.getChild(self, name, request)
def render_GET(self, request):
print(request)
#do stuff and return stuff
root = FormPage()
root.putChild('rcs', File("./images"))
#factory = Site(FormPage())
factory = Site(root)
reactor.listenTCP(port, factory)
reactor.run()
如您所见,我在接近尾声时做了 root.putChild
,期望当我到达 http://site/rcs
时,我得到了 ./images
内容的目录列表,但是当然那不会发生。我错过了什么?我已经尝试了很多 here. Also this one 建议的东西都不起作用,因为无论如何它只是提供静态文件。不管有没有指定putChild,它总是去getChild。
在 Python 3 上,像 "rcs"
这样的裸字符串文字是一个 unicode 字符串(Python 3 调用 "str" 但我将调用 "unicode" 以避免歧义)。
但是,twisted.web.resource.Resource.putChild
需要一个字节字符串作为它的第一个参数。相反,当给定 unicode 时,它的行为很糟糕。将您的路径分段为字节字符串(例如 b"rcs"
),服务器将在 Python 3.
上表现更好
代码在这里。
from twisted.web.static import File
from twisted.web.server import Site
from twisted.web.resource import Resource
from twisted.internet import ssl, reactor
from twisted.python.modules import getModule
import secure_aes
import urllib.parse
import cgi
import json
import os
import hashlib
import coserver
import base64
import sim
if not os.path.exists(os.path.join(os.getcwd(),'images')):
os.mkdir(os.path.join(os.getcwd(),'images'))
with open ('form.html','r') as f:
fillout_form = f.read()
with open ('image.html','r') as f:
image_output = f.read()
port = 80#int(os.environ.get('PORT', 17995))
class FormPage(Resource):
#isLeaf = True
def getChild(self, name, request):
print('GC')
if name == '':
return self
return Resource.getChild(self, name, request)
def render_GET(self, request):
print(request)
#do stuff and return stuff
root = FormPage()
root.putChild('rcs', File("./images"))
#factory = Site(FormPage())
factory = Site(root)
reactor.listenTCP(port, factory)
reactor.run()
如您所见,我在接近尾声时做了 root.putChild
,期望当我到达 http://site/rcs
时,我得到了 ./images
内容的目录列表,但是当然那不会发生。我错过了什么?我已经尝试了很多 here. Also this one 建议的东西都不起作用,因为无论如何它只是提供静态文件。不管有没有指定putChild,它总是去getChild。
在 Python 3 上,像 "rcs"
这样的裸字符串文字是一个 unicode 字符串(Python 3 调用 "str" 但我将调用 "unicode" 以避免歧义)。
但是,twisted.web.resource.Resource.putChild
需要一个字节字符串作为它的第一个参数。相反,当给定 unicode 时,它的行为很糟糕。将您的路径分段为字节字符串(例如 b"rcs"
),服务器将在 Python 3.