2017-02-20 5 views
1

Code ici.Python twisted putChild pas de transmission prévue

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

Comme vous pouvez le voir, je l'ai fait root.putChild vers la fin des choses, attendant que quand je suis arrivé http://site/rcs je suis donné une liste de répertoires du contenu de ./images mais bien sûr, cela ne se produit pas. Qu'est-ce que je rate? J'ai essayé beaucoup de choses suggérées de here. En outre, this one ne fonctionne pas car cela ne sert que des fichiers statiques. Il va à getChild tout le temps indépendamment du fait que si ont spécifié putChild ou non.

+0

Je ne peux pas reproduire le problème. J'ai supprimé un tas de trucs superflus mais j'ai laissé le noyau intact - et il sert une liste de répertoires pour moi. –

+0

Quelle version de Twisted, Python, quel OS, etc. –

+0

Python 3.5, Windows 10. Pas de venv. – Luke

Répondre

4

Sur Python 3, une chaîne littérale nue telle que "rcs" est une chaîne unicode (que Python 3 appelle "str" ​​mais que j'appellerai "unicode" pour éviter toute ambiguïté).

Toutefois, twisted.web.resource.Resource.putChild requiert une chaîne d'octets comme premier argument. Il se comporte plutôt mal lorsqu'il reçoit unicode, à la place. Faites vos segments de chemin dans les chaînes d'octets (par exemple b"rcs") et le serveur se comportera mieux sur Python 3.