Django restframework 版本控制与参数解析

因为这两节的内容不太重要,在实际开发中应用比较少,所有这里只是简单的介绍一下,做以了解就行。

1. 版本控制

有时间在开发的时候,我们会开发出很多个版本,不同的版本的会返回不同的数据,所以前端要访问不同的版本,后端要传递给相应的类型。
下面是我们自己定义的一个版本控制,通过获取前端传递来的版本要求,后台返回相应的数据,可以自己查看query_params 的源码,查看它是如何获得参数信息。
自定义的一个版本获取
2. 通过restframework 定义版本控制,用的最多的是下面这两个模块

from rest_framework.versioning import QueryParameterVersioning, URLPathVersioning

我们介绍一下URLPathVersioning,首先看一下它的源码。
在这里插入图片描述
发现他是通过url 传递版本控制信息。
在这里插入图片描述
最后在settings 进行相关的设置
在这里插入图片描述

2. 参数解析

以前我们获取前端传递来的json 字符串,需要进行解析,常用的方式为:

		json_data = json.loads(request.body.decode('utf8'))

需要对request.body 进行编码,我们这里可以引用restframework 的一个库,省去这个麻烦,可以接受不同的请求头的信息。
在这里插入图片描述
以上只是简单的介绍,要是想深入理解的,可以看看源码,但是平时开发中,第二个应用应该比第一个多一点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是基于Djangorest_framework框架的ModelViewSet视图的源码解析: 1.基本介绍 ModelViewSet视图是Django框架的rest_framework模块中的一个视图类,它继承了GenericAPIView和Mixins,提供了对资源的CRUD操作。ModelViewSet视图类中提供了一系列的方法,如list、create、retrieve、update、partial_update、destroy等,这些方法对应着HTTP请求中的GET、POST、PUT、PATCH、DELETE等动词。 2.源码解析 ModelViewSet视图的源码主要涉及到以下几个部分: (1)视图类的定义 ``` class ModelViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, GenericViewSet): """ A viewset that provides default `create()`, `retrieve()`, `update()`, `partial_update()`, `destroy()` and `list()` actions. """ pass ``` 从源码可以看出,ModelViewSet继承了CreateModelMixin、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin和ListModelMixin这些视图混合类,以及GenericViewSet类。 (2)视图方法的实现 a. list方法 ``` def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data) ``` list方法用于返回资源列表,它首先通过get_queryset方法获取查询集,然后通过filter_queryset方法对查询集进行过滤,最后通过get_serializer方法将查询集序列化为JSON数据返回给客户端。 b. create方法 ``` def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) ``` create方法用于创建资源,它首先通过get_serializer方法获取序列化器,然后通过perform_create方法进行资源的创建,最后返回HTTP 201 Created状态码以及资源的JSON数据。 c. retrieve方法 ``` def retrieve(self, request, *args, **kwargs): instance = self.get_object() serializer = self.get_serializer(instance) return Response(serializer.data) ``` retrieve方法用于获取单个资源,它通过get_object方法获取资源实例,然后通过get_serializer方法将资源实例序列化为JSON数据返回给客户端。 d. update方法 ``` 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) ``` update方法用于更新资源,它首先通过get_object方法获取资源实例,然后通过get_serializer方法获取序列化器,最后通过perform_update方法进行资源的更新,最终返回更新后的资源JSON数据。 e. partial_update方法 ``` def partial_update(self, request, *args, **kwargs): kwargs['partial'] = True return self.update(request, *args, **kwargs) ``` partial_update方法用于部分更新资源,它通过调用update方法,并将partial参数设置为True,进行资源的部分更新。 f. destroy方法 ``` def destroy(self, request, *args, **kwargs): instance = self.get_object() self.perform_destroy(instance) return Response(status=status.HTTP_204_NO_CONTENT) ``` destroy方法用于删除资源,它首先通过get_object方法获取资源实例,然后通过perform_destroy方法进行资源的删除,最终返回HTTP 204 No Content状态码。 3.总结 ModelViewSet视图是Django框架的rest_framework模块中的一个视图类,它继承了GenericAPIView和Mixins,提供了对资源的CRUD操作。通过对视图类的源码解析,我们可以深入了解ModelViewSet视图的内部实现,从而更好地理解和使用该视图类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值