Python 编写优秀的web资源

Python 编写优秀的web资源,python,http,twisted,twisted.web,Python,Http,Twisted,Twisted.web,我写了我的第一个Twisted 10.1.0 web资源,我正在寻求反馈,因为我觉得这不完全符合最佳实践,可能包含新手bug 资源响应/?url=http://www.foo.baz/abc123并依赖于返回dict的服务。如果出现任何错误(例如,无效或不存在url,则返回400) 有什么评论吗?有什么需要改进的吗 class ProcessedUrl(resource.Resource): isLeaf = True def __init__(self, service):

我写了我的第一个Twisted 10.1.0 web
资源
,我正在寻求反馈,因为我觉得这不完全符合最佳实践,可能包含新手bug

资源响应
/?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

我认为,如果在发布之前设置
isLeaf=True

尝试运行代码,则无需显式重写
getChild()。有输入错误,例如,
d.addCallback(\u write)
->
d.addCallback(self.\u write,request)
我在发布之前没有运行它,只是因为我的问题考虑的是最佳实践/方法,而不是代码正确性。无论如何,谢谢你的提醒!对。对于基于斜杠分隔路径部分的资源树的“普通”内容,您永远不需要覆盖
getChild
。这也是正确的,因为“isLeaf=true”意味着“永远不要在我身上查找子对象”。