我正在尝试为JSON实现客户机。我与Django一起工作,我发现它处理查询的方式非常有趣。
例如:
>>> from django.contrib.auth.models import User
>>> user = User.objects.get(username='johndoe')
>>> user
<User: johndoe>
>>> user.objects.get(username='johndoe')
AttributeError: Manager isn't accessible via User instances我感兴趣的是Manager到底是什么,以及是否有一种简单的实现方法。我试图做一些类似的事情,但不幸地失败了。这是我的第一次尝试:
class Api(object):
def __init__(self, api_key):
self.api_key = key
@property
def player(self):
return Player(api=self)
class Player(object):
def __init__(self, api):
self.api = api
def get(self, id_):
'''
gets json and turns it into dictionary
'''
self.name = data['name']
self.id_ = id_
return self所以用法应该如下所示:
>>> api = Api('api_key_here')
>>> player = api.player.get('player_id_here')然而,对我来说,这样做感觉很粗略,而且是错误的(这当然是正确的)。这里的问题是:
下面是我想如何使用我的Api类:
api = Api('api_key_here')
player = api.player.get('player_id') #getting player object
item = api.item.get('item_id') #getting item object
recent_games = api.recent_games.filter(player=player, how_many=10) #getting list of game objects发布于 2017-01-06 06:46:03
我建议您看看https://github.com/samgiles/slumber,它实现了您可能正在做的事情( Rest客户端)。但是即使你在做其他的事情,睡眠也是实现你想要做的事情。类似于:
class RestResource(object):
def __init__(self, *args, **kwargs):
self._store = kwargs
def __call__(self, id=None, action=None):
"""
Returns a new instance of self modified by one or more of the available
parameters. These allows us to do things like override format for a
specific request, and enables the api.resource(ID).get() syntax to get
a specific resource by it's ID.
"""
kwargs = {
'foo': self._store['name1'],
'bar': self._store['name2']
}
return self.__class__(**kwargs)
class Api(object):
resource_class = RestResource
def __getattr__(self, item):
kwargs = {
'name1': 'val1',
'name2': 'val2'
}
return self.resource_class(**kwargs)你可以这样用
api = Api()
api.player.get()https://stackoverflow.com/questions/41499798
复制相似问题