首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DjangoRestFramework发出请求

使用DjangoRestFramework发出请求
EN

Stack Overflow用户
提问于 2015-08-11 07:33:19
回答 1查看 213关注 0票数 1

我正在构建一个rest API,我想知道HTTP的最佳实践,以及它将如何应用于DRF。当发送PUT请求时,在主体中,请求是否具有它们将要操作的对象的所有参数?即使不是所有人都在改变?或者它们只发送正在更新的字段?例如,如果我们有一个包含No. of roomsfloorsHouse对象,而我正在更改No. of rooms,我应该只发送该参数,还是同时发送这两个参数?

如果请求应该只包含正在更新的字段,那么如何将其转换为DjangoRestFramework?任何帮助都将不胜感激!

我的看法是:

代码语言:javascript
复制
 class HouseDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = House.objects.all()
     serializer_class = HouseSerializer 

序列化程序是:

代码语言:javascript
复制
class HouseSerializer(serializers.ModelSerializer):
    quotes = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = House
        fields = (
            'pk',
            'address',
            'quotes',
        )
EN

回答 1

Stack Overflow用户

发布于 2015-08-14 05:38:08

PUT代表完全资源更新,PATCH代表部分资源更新because Fielding says so

因此,在您的示例中,如果您只想更新HouseDetail模型的No. of rooms,则需要在PATCH请求中发送以下有效负载:

代码语言:javascript
复制
{ "no. of rooms": "42" }

仍然可以在DRF中使用PUT请求部分更新内容(如下所述),但您应该简单地使用PATCH,因为它就是为此而创建的。您可以获得模型的PUTPATCH功能,因为您已经继承了generics.RetrieveUpdateDestroyAPIView类并定义了序列化程序。

如果在您的PUT请求中省略了必填字段(请参阅requireddocumentation ),那么您将收到一个400状态代码和一个类似于{"detail": "x field is required"}的响应。但是,当您通过PATCH请求时,会有一个partial=True参数传递给序列化程序,它只允许这种部分更新。我们可以在UpdateModelMixin上看到这一点

代码语言:javascript
复制
def partial_update(self, request, *args, **kwargs):
    kwargs['partial'] = True
    return self.update(request, *args, **kwargs)

它调用update,这是:

代码语言:javascript
复制
def update(self, request, *args, **kwargs):
    partial = kwargs.pop('partial', False)
    instance = self.get_object()
    serializer = self.get_serializer(instance, data=request.data, partial=partial)
    serializer.is_valid(raise_exception=True)
    self.perform_update(serializer)
    return Response(serializer.data)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31930846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档