私は自分の最初の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
を設定する場合は、明示的
getChild()
を上書きする必要はありませんと思う。 'd.addCallback(_write)' - > 'd.addCallback(self._write、request)' – jfs私の質問はコードの正しさよりもベストプラクティス/アプローチに関するものであるため、投稿前に実行していません。とにかく、頭のおかげで! – phretor