zoukankan      html  css  js  c++  java
  • 74

    from rest_framework.views import APIView
    from rest_framework.response import Response
    from .response import APIResponse
    from . import models, serializers

    class CarAPIView(APIView):
    # 群查
    def get(self, request, *args, **kwargs):
    car_query = models.Car.objects.filter(is_delete=False).all()
    car_ser = serializers.CarModelSerializer(instance=car_query, many=True)
    return APIResponse(results=car_ser.data)

    """ 视图家族
    from rest_framework import views, mixins, generics, viewsets

    views:视图类 - APIView,GenericAPIView(generics中)
    mixins:视图工具类 - CreateModelMixin,ListModelMixin,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin
    generics:工具视图类 - 九个类
    viewsets:视图集 - 两个视图集基类,两个视图集子类,一个工具类
    """

    回顾APIView类:1)拥有View的所有 2)重写as_view 3)重写dispatch 4)一系列类属性

    GenericAPIView类

    1)拥有APIView的所有

    from rest_framework.generics import GenericAPIView
    class CarGenericAPIView(GenericAPIView):
    # 不能直接写到objects结束,因为objects结束时,不是QuerySet对象,而是Manager对象,但 .all() 和 .filter() 后一定是QuerySet对象
    queryset = models.Car.objects.filter(is_delete=False).all()
    serializer_class = serializers.CarModelSerializer
    lookup_url_kwarg = 'pk'
    # 群查
    """
    def get(self, request, *args, **kwargs):
    # car_query = models.Car.objects.filter(is_delete=False).all()
    car_query = self.get_queryset()

        # car_ser = serializers.CarModelSerializer(instance=car_query, many=True)
        car_ser = self.get_serializer(car_query, many=True)
    
        return APIResponse(results=car_ser.data)
    """
    
    # 单查
    def get(self, request, *args, **kwargs):
        # pk = kwargs.get('pk')
        # car_obj = models.Car.objects.filter(is_delete=False).filter(pk=pk).first()
        car_obj = self.get_object()
    
        # car_ser = serializers.CarModelSerializer(car_obj)
        car_ser = self.get_serializer(car_obj)
    
        return APIResponse(results=car_ser.data)
    

    mixins视图工具类

    from rest_framework.mixins import RetrieveModelMixin, ListModelMixin, CreateModelMixin
    class CarReadCreateGenericAPIView(ListModelMixin, RetrieveModelMixin, CreateModelMixin, GenericAPIView):
    queryset = models.Car.objects.filter(is_delete=False).all()
    serializer_class = serializers.CarModelSerializer
    lookup_url_kwarg = 'pk'
    # 群查
    # """
    def get(self, request, *args, **kwargs):
    # car_query = self.get_queryset()
    # car_ser = self.get_serializer(car_query, many=True)
    # return APIResponse(results=car_ser.data)
    return self.list(request, *args, **kwargs)
    # """

    # 单查
    """
    def get(self, request, *args, **kwargs):
        # car_obj = self.get_object()
        # car_ser = self.get_serializer(car_obj)
        # return APIResponse(results=car_ser.data)
        response = self.retrieve(request, *args, **kwargs)
        return APIResponse(results=response.data)
    """
    
    # 单增
    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)
    

    Generics工具视图类

    单独完成单查接口

    from rest_framework.generics import RetrieveAPIView
    class CarRetrieveAPIView(RetrieveAPIView):
    queryset = models.Car.objects.filter(is_delete=False).all()
    serializer_class = serializers.CarModelSerializer
    lookup_url_kwarg = 'pk'

    单独完成群查接口

    from rest_framework.generics import ListAPIView
    class CarListAPIView(ListAPIView):
    queryset = models.Car.objects.filter(is_delete=False).all()
    serializer_class = serializers.CarModelSerializer

    单查(get)、单整体改(put)、单局部改(patch)、单删接口(delete)

    from rest_framework.generics import RetrieveUpdateDestroyAPIView
    class CarRetrieveUpdateDestroyAPIView(RetrieveUpdateDestroyAPIView):
    queryset = models.Car.objects.filter(is_delete=False).all()
    serializer_class = serializers.CarModelSerializer

  • 相关阅读:
    TensorboardX的使用【有手就⭐系列】
    Python学习记录
    es 之 自定义 mapping(五)
    es 索引和文档 API (四)
    布尔查询(三)
    term 和 match 查询(二)
    使用 Python 批量将数据插入到 ES中
    【flask + vue 前后端分离博客】设计 User 用户(三)
    【flask + vue 前后端分离博客】使用 axios 访问接口(二)
    【flask + vue 前后端分离博客】创建第一个 Flask RESTFul(一)
  • 原文地址:https://www.cnblogs.com/luodaoqi/p/12121845.html
Copyright © 2011-2022 走看看