【发布时间】:2014-07-02 13:17:56
【问题描述】:
我有一个 RootFactory 定义如下:
class RootFactory(object):
__parent__ = None
__name__ = None
def __init__(self, request):
self.request = request
def __getitem__(self, key):
if key == "user":
dispatch = UserSelector(self.request)
dispatch.__name__ = key
dispatch.__parent__ = self
return dispatch
class UserSelector(object):
__parent__ = None
__name__ = None
def __init__(self, request):
self.request = request
def __getitem__(self, key):
dispatcher = UserDispatcher(self.request)
dispatcher.__name__ = key
dispatcher.__parent__ = self
return dispatcher
class UserDispatcher(object):
__parent__ = None
__name__ = None
def __init__(self, request):
self.request = request
def __getitem__(self, key):
user = self.request.db.query(User)
user = user.get(key)
if not user:
raise KeyError
dispatcher = UserDispatcher(self.request)
dispatcher.__name__ = key
dispatcher.__parent__ = self
dispatcher.user = user
return dispatcher
这是来自我继承的一个项目,我正在尝试弄清楚它是如何工作的。该项目是一个 sql alchemy 脚手架。因此,当GET 请求进入localhost:6543/user 时,会创建RootFactory 的实例并执行__getitem__ 方法。这将返回一个 UserSelector 的实例。
是什么导致__getitem__ 在UserSelector 中执行?
另外,如果请求是PUT 或POST,什么会实例化UserDispatcher 对象?
在我的UserViews 中,UserDispatch 作为PUT 请求的上下文传递。当我尝试发送PUT 时,我得到404 The resource could not be found. predicate mismatch 以查看UserViews (request_method = GET,HEAD)。谓词在这里指的是什么?
PUT 数据有问题吗?
【问题讨论】:
标签: pyramid