编写优秀的Twisted Web资源

时间:2010-11-26 17:13:13

标签: python http twisted twisted.web

我写了我的第一个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 个答案:

答案 0 :(得分:3)

如果设置getChild()

,则无需明确覆盖isLeaf=True