2010-11-26 6 views
2

私は自分の最初のTwisted 10.1.0ウェブResourceを書きました。私はベストプラクティスに正確に従わず、初心者のバグを含んでいる可能性があると感じてフィードバックを求めています。優れたツイストのあるウェブリソースを書く

リソースは/?url=http://www.foo.baz/abc123に応答し、dictを返すサービスに依存します。何かがうまくいかない場合(無効または存在しないなどurl)、400が返されます。

コメントがありますか?

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

を設定する場合は、明示的getChild()を上書きする必要はありませんと思う。 'd.addCallback(_write)' - > 'd.addCallback(self._write、request)' – jfs

+0

私の質問はコードの正しさよりもベストプラクティス/アプローチに関するものであるため、投稿前に実行していません。とにかく、頭のおかげで! – phretor

答えて

3

を向上させるために、修正するためのものは私はあなたが投稿する前にあなたのコードを実行してみisLeaf=True

+0

真。スラッシュで区切られたパス部分に基づいたリソースのツリーを持つ「普通の」ものについては、 'getChild'をオーバーライドする必要はありません。 – jpsimons

+0

"isLeaf = True"は "子供を私の上から見上げることはない"という意味でも当てはまります。 –

関連する問題