2010-11-26 43 views
2

J'ai écrit mon tout premier Web Twisted 10.1.0 Resource et je cherche des commentaires, parce que je pense que cela ne suit pas exactement la meilleure pratique et peut contenir des bogues de débutants. La ressource répond à /?url=http://www.foo.baz/abc123 et s'appuie sur un service qui renvoie un dict. Si quelque chose ne va pas (par exemple, url non valide ou non existant, un 400 est renvoyé).Rédaction d'excellentes ressources web Twisted

Un commentaire? Quelque chose à fixer, pour améliorer

class ProcessedUrl(resource.Resource): 
    isLeaf = True 

    def __init__(self, service): 
     resource.Resource.__init__(self) 
     self.service = service 

    def _cancel(self, err, deferred): 
     deferred.cancel() 

    def _write(self, value, request): 
     request.setResponseCode(http.OK) 
     request.write(json.dumps(value)) 
     request.finish() 

    def _cleanUrl(self, url): 
     return cleanUrl(url) 

    def _checkUrl(self, url): 
     if url is not None: 
      if isValidUrl(url): 
       return True 
     return False 

    def render_GET(self, request): 
     request.setResponseCode(http.BAD_REQUEST) 
     url = request.args.get('url', [None])[0] 

     if self._checkUrl(url): 
      url = self._cleanUrl(url) 
      d = self.service.processUrl(url) 
      request.notifyFinish().addErrback(self._cancel, d) 
      d.addCallback(_write) 
      d.addErrback(log.err) 
     else: 
      return 'Invalid or no URL.' 
     return server.NOT_DONE_YET 

    def getChild(self, name, request): 
     return self 
+1

Essayez d'exécuter votre code avant de poster. Il y a des fautes de frappe par exemple, 'd.addCallback (_write)' -> 'd.addCallback (self._write, request)' – jfs

+0

Je ne l'ai pas exécuté avant de poster juste parce que ma question concerne les meilleures pratiques/approches plutôt que l'exactitude du code. Quoi qu'il en soit, merci pour les heads-up! – phretor

Répondre

3

Je pense que vous auriez pas besoin de remplacer explicitement getChild() si vous définissez isLeaf=True

+0

True. Pour les éléments "normaux" où vous avez un arbre de ressources basé sur des parties de chemin délimitées par des barres obliques, vous n'avez jamais besoin de surcharger 'getChild'. – jpsimons

+0

Aussi vrai parce que "isLeaf = True" signifie "ne cherche jamais d'enfants sur moi". –