2

我编写了我的第一个 Twisted 10.1.0 网络Resource并且我正在寻求反馈,因为我觉得这并不完全遵循最佳实践并且可能包含新手错误。

资源响应/?url=http://www.foo.baz/abc123并依赖于返回dict. 如果出现任何问题(例如,无效或不存在url,则400返回 a)。

任何意见?有什么要解决的,要改进的

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
4

1 回答 1

3

认为getChild()如果您设置,您不需要显式覆盖isLeaf=True

于 2010-11-26T21:54:27.680 回答