2017-08-12 1 views
0

Je veux générer toutes les pages d'un site en utilisant twisted. Il doit être similaire à generating a page dynamically.Générer un site dynamiquement en utilisant Twisted

je suis venu avec ceci:

class Home(Resource): 
    isLeaf = False 

    def __init__(self, pathname): 
     Resource.__init__(self) 
     self.pathname = pathname 

    def getChild(self, name, request): 
     if name == '': 
      return self 
     return Resource.getChild(self, name, request) 

    def render_GET(self, request): 
     path = "/var/www/html/books.toscrape.com/catalogue/" 
     fname = path + self.pathname 
     if ".html" in self.pathname: 
      f = open(fname) 
      s=f.read() 
      return s 
     else: 
      fname = fname + "/index.html" 
      f = open(fname) 
      s=f.read() 
      return s 

class ElseSite(Resource): 
    def getChild(self,name,request): 
     return Home(name) 

resource = ElseSite() 
factory = Site(resource) 

Je suis en mesure de générer des pages avec l'url localhost:8080/foo, mais comment puis-je ajouter des barres obliques à elle, à savoir quelque chose comme localhost:8080/foo/bar?

+0

Avez-vous l'intention de poser une question? –

+0

@ Jean-PaulCalderone Désolé, ajouté mon doute. –

Répondre

1

Les enfants eux-mêmes peuvent avoir des enfants:

from twisted.web.resource import Resource 

class Foo(Resource): 
    def getChild(self, name, request): 
     return Bar(name) 

class Bar(Resource): 
    def getChild(self, name, request): 
     return Data(name) 

site = Site(Foo())  
... 

Vous pouvez également jeter un oeil à Klein qui prévoit un style différent de la définition de votre hiérarchie. À partir des documents Klein:

from klein import Klein 
app = Klein() 

@app.route('/') 
def pg_root(request): 
    return 'I am the root page!' 

@app.route('/about') 
def pg_about(request): 
    return 'I am a Klein application!' 

app.run("localhost", 8080) 

Le style Web Twisted natif convient aux hiérarchies de ressources très dynamiques. Le style de Klein est agréable pour les hiérarchies relativement fixes.

+0

Merci pour votre réponse. Cette réponse m'a aidé: https://stackoverflow.com/a/37689813/217088. –

-1

Cette réponse m'a aidé: https://stackoverflow.com/a/37689813/217088.

J'ai défini une ressource unique avec isLeaf = True, puis utilisé request.postpath pour obtenir la requête après http://localhost:8080/.

Mon code ressemble à ceci maintenant:

class Home(Resource): 
    isLeaf = True 

    def __init__(self): 
     Resource.__init__(self) 

    def render_GET(self, request): 
     path = "/var/www/html/books.toscrape.com/" 
     filepath = '/'.join(request.postpath) 
     fname = path + filepath 
     f = open(fname) 
     s=f.read() 
     return s 

resource = Home() 
factory = Site(resource) 
+0

Ceci est une implémentation très problématique de 'render_GET'. S'il vous plaît considérer une demande pour un chemin comme '../../../../ etc/passwd'. Ce n'est pas un bon moyen d'implémenter une ressource. –

+0

Je comprends la faute ici. Merci! –