Python 编写优秀的web资源
我写了我的第一个Twisted 10.1.0 webPython 编写优秀的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):
资源
,我正在寻求反馈,因为我觉得这不完全符合最佳实践,可能包含新手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”意味着“永远不要在我身上查找子对象”。