修改Django rest框架请求
我的问题是如何使用更通用的RESTAPI编写更严格的API。我的应用程序中有可用的api,但我需要添加一些基于通用api的更严格的服务,这是一个问题,因为我不能简单地覆盖请求数据,因为它是不可变的。我正在使用Django rest框架3 例如: 我的动物通用api:修改Django rest框架请求,django,rest,django-rest-framework,Django,Rest,Django Rest Framework,我的问题是如何使用更通用的RESTAPI编写更严格的API。我的应用程序中有可用的api,但我需要添加一些基于通用api的更严格的服务,这是一个问题,因为我不能简单地覆盖请求数据,因为它是不可变的。我正在使用Django rest框架3 例如: 我的动物通用api: class AnimalService(APIView): def get(self, request, *args, **kwargs): data = request.data.copy()
class AnimalService(APIView):
def get(self, request, *args, **kwargs):
data = request.data.copy()
if data.get('type') == 'dog':
#...do something
现在我只需要硬编码狗的api:
class DogService(AnimalService):
def get(self, request, *args, **kwargs):
#hardcode request.data['type'] = 'dog'
return super(DogService, self).get(*args, **kwargs)
您可以在
kwargs
中传递类型
,而不是覆盖请求
对象。然后,您可以在AnimalServiceView
中使用这些kwargs
,因为这些修改后的kwargs
被传递给它
class DogService(AnimalService):
def get(self, request, *args, **kwargs):
kwargs['type'] = 'dog' # set the animal type in kwargs
return super(DogService, self).get(request, *args, **kwargs)
然后在AnimalService
视图中,您可以执行以下操作:
class AnimalService(APIView):
def get(self, request, *args, **kwargs):
if kwargs.get('type') == 'dog': # check the 'type'
#...do something
另一种方法是根据请求的资源设置请求的
animal\u type
属性。然后在您的视图中,您可以使用request.animal\u type
属性进行检查。更好的方法是使用DRF权限类,并限制请求没有type
作为dog
@RahulGupta yes,但我不需要客户端向我发送类型,因为我可以在我的dog服务中对其进行硬编码。客户端不必知道我在rest视图中需要“type”,所以不可能硬编码一些参数?