Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改Django rest框架请求_Django_Rest_Django Rest Framework - Fatal编程技术网

修改Django rest框架请求

修改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()

我的问题是如何使用更通用的RESTAPI编写更严格的API。我的应用程序中有可用的api,但我需要添加一些基于通用api的更严格的服务,这是一个问题,因为我不能简单地覆盖请求数据,因为它是不可变的。我正在使用Django rest框架3

例如:

我的动物通用api:

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”,所以不可能硬编码一些参数?