首页 > 其他分享 >DRF思维导图及知识点总结(很值得一看的博客)

DRF思维导图及知识点总结(很值得一看的博客)

时间:2023-02-23 22:12:20浏览次数:32  
标签:知识点 get 导图 self request 视图 action serializer DRF

DRF思维导图及知识点总结

1.视图类-view

view:djngo自带的
    请求对象:Django默认的HttpRequest对象
    获取数据:
    	Get请求数据:request.GET
        POST、PUT等请求数据:request.POST,request.FILES
    返回对象:django提供的JsonResponse对象
    返回数据:JsonResponse({})
class Book(View):
    def get(self,request):
        books = BookInfo.objects.all()
        ser = BookSerializer(books,many=True)
        return JsonResponse(ser.data,safe=False)

2.视图类-APIView(继承View)

请求对象:REST framework 提供的扩展了HttpRequest类的Request类的对象
获取数据:
    	Get请求数据:request.query_params
        POST、PUT等请求数据:request.data
返回对象:rest_framework.response.Response提供的Response对象
返回数据:Response({})
class Book(APIView):
    def get(self,request):
        books = BookInfo.objects.all()
        ser = BookSerializer(books,many=True)
        return JsonResponse(ser.data)    

3.视图类-GenericAPIView:继承APIView

请求对象:REST framework提供的扩展了HttpRequest类的Request类的对象。
获取数据:
  GET请求数据:request.query_params
  POST、PUT等请求数据:request.data
返回对象:rest_framework.response.Response提供的Response对象
返回数据:Response({})
作用:单独使用时,APIView跟GenericAPIView没有区别,只是实现方式不同,GenericAPIView主要配合五个拓展类使用
class Book(GenericAPIView):
    query_set = BookInfo.object.all()    # 指定当前视图使用的查询集数据
    serializer_class = BookSerializer    # 指定当前类视图使用的序列化器
    
    get get(self,request):
        books = self.get_queryset()      # 获取查询集中的所有数据
        ser = self.get_serializer(books,many = True)  # 使用指定序列化器,获取序列化器对象
        return Response(ser.data)

4.五个扩展类:CreateModelMixin, ListModelMixin,UpdateModelMixin, DestroyModelMixin,RetrieveModelMixin:继承object

主要是给GenericAPIView提供常见的增删改查函数

class Books(GenericAPIView, CreateModelMixin, ListModelMixin,UpdateModelMixin, DestroyModelMixin,RetrieveModelMixin):
    query_set = BookInfo.object.all()    # 指定当前视图使用的查询集数据
    serializer_class = BookSerializer    # 指定当前类视图使用的序列化器
    
    def get(self,request):
        return self.list(request)
    
    def post(self,request):
        return self.create(request)
    
    def put(self,request,pk):
        return self.update(request,pk)
    
    def delete(self,request,pk):
        return self.destroy(request,pk)
    
    def get(self, request, pk):
        return self.retrieve(request, pk)

5.两个扩展类子类:封装GenericAPIView和五个扩展类

from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView
from rest_framework.response import Response

from book_drf.serializer import BookSerializer
from books.models import BookInfo
# Create your views here.


class Books(ListCreateAPIView):
    queryset = BookInfo.objects.all()  # 指定当前类视图使用的查询集数据
    serializer_class = BookSerializer  # 指定当前类视图使用的序列化器


class BookDRFView(RetrieveUpdateDestroyAPIView):
    """
    更新书籍
    删除书籍
    """
    queryset = BookInfo.objects.all()  # 指定当前类视图使用的查询集数据
    serializer_class = BookSerializer  # 指定当前类视图使用的序列化器

视图集:

一系列逻辑相关的动作动作可以放到同一个类中,例如查询所有图书与查询单图书,只需要一个类
list() 提供一组数据
retrieve() 提供单个数据
create() 创建数据
update() 保存数据
destory() 删除数据
ViewSet视图集类不再实现get()、post()等方法,而是实现动作 action 如 list() 、create() 等。

视图集只在使用as_view()方法的时候,才会将action动作与具体请求方式对应上

常用视图集父类

1) ViewSet
继承自APIView,作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。
在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。

2)GenericViewSet
继承自GenericAPIView,作用也与GenericAPIVIew类似,提供了get_object、get_queryset等方法便于列表视图与详情信息视图的开发。
在GenericViewSet中,需要我们自己实现action方法。

3)ModelViewSet
继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。
在ModelViewSet中,不需要我们自己实现action方法。

4)ReadOnlyModelViewSet
继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin。
在ReadOnlyModelViewSet中,不需要我们自己实现action方法中的查询所有数据和查询单一数据。

视图集中定义附加action动作

在视图集中,除了上述默认的方法动作外,还可以添加自定义动作。
添加自定义动作需要使用rest_framework.decorators.action装饰器。
以action装饰器装饰的方法名会作为action动作名,与list、retrieve等同。
action装饰器可以接收两个参数:
    methods: 该action支持的请求方式,列表传递
    detail: 表示是action中要处理的是否是视图资源的对象(即是否通过url路径获取主键)
True 表示使用通过URL获取的主键对应的数据对象
False 表示不使用URL获取主键
from rest_framework import mixins
from rest_framework.viewsets import GenericViewSet
from rest_framework.decorators import action

class BookInfoViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer

    # detail为False 表示不需要处理具体的BookInfo对象
    @action(methods=['get'], detail=False)
    def latest(self, request):
        """
        返回最新的图书信息
        """
        book = BookInfo.objects.latest('id')
        serializer = self.get_serializer(book)
        return Response(serializer.data)

    # detail为True,表示要处理具体与pk主键对应的BookInfo对象
    @action(methods=['put'], detail=True)
    def read(self, request, pk):
        """
        修改图书的阅读量数据
        """
        book = self.get_object()
        book.bread = request.data.get('read')
        book.save()
        serializer = self.get_serializer(book)
        return Response(serializer.data)

img

标签:知识点,get,导图,self,request,视图,action,serializer,DRF
From: https://www.cnblogs.com/zx0524/p/17149636.html

相关文章

  • dva.js 知识导图
    (JavaScript语言&)JavaScript语言&不要用 var,而是用 const 和 let,分别表示常量和变量。不同于 var 的函数作用域,const 和 let 都是块级作用域。模板字符串......
  • 32-DRF框架-序列化器ModelSerializer
    #如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类创建modelserializer序列化器#......
  • Java基础知识点(类的几个补充注意事项和private关键字)
    一:类的几个补充注意事项1.用来描述一类事物的类,专业叫做javaBean类2.在以前,编写main方法的类叫做测试类,我们可以在测试类中创建javabean类的对象并进行赋值调用。3.类名首字......
  • cookie,session,token,drf-jwt
    1.cookie,session,token发展史引入:我们都知道http协议本身是一种无状态的协议,一个普通的http请求简单分为三步:客户端发送请求request服务端收到请求并进行处理服务端将结......
  • 30-DRF框架-Serializer序列化器
    #作用:序列化器可以进行数据的校验,对数据对象进行转换#DjangoRESTframework中的序列化使用类来定义,须继承自rest_framework.serializers.Serializer#Serializer......
  • #yyds干货盘点#【愚公系列】2023年02月 .NET/C#知识点-LINQ和lambda实现左、右、内链
    前言1.左连接table1居左,故谓之左连接。这种情况下,以table1为主,即table1中的所有记录均会被列出。有一下三种情况:1、对于table1中的每一条记录对应的城市如果在table2中也......
  • 29-DRF框架-DRF介绍及环境配置
    #增:校验请求数据->执行反序列化过程->保存数据库->将保存的对象序列化并返回#删:判断要删除的数据是否存在->执行数据库删除#改:判断要修改的数据是否存在->......
  • django-drf跨域
    django使用django-cors-headers解决跨域问题1、使用pip安装pipinstalldjango-cors-headers2、添加到setting的app中INSTALLED_APPS=( ... 'corsheaders', ........
  • 网络知识点汇总1-路由
    1.路由选择的三条原则 1)最长掩码匹配原则:掩码越长越优先; 2)路由优先级/管理距离越小越优:优先级参照下表  在华为的设备中,路由器分别定义了外部优先级和内部优先级......
  • drf高级五ModelSerializer
    不同于Serializer,可以帮助我们完成。它将根据模型自动生成一组字段。它将根据模型上的参数自动生成序列化程序的验证程序。它包括create()和update()简单默认实现。......