Джанго вид расширенный класс

Джанго вид расширенный класс

При расширенном классе необходимо GenericAPIViewиспользовать расширенный внутренний класс, при вызове сериалайзер, используютget_serializer

Нужно настроить get, postи другие методы запроса, внутренняя реализация вызывает соответствующий метод , чтобы расширить класс.

A, Mixins вид подкласса

Роль:

Он обеспечивает несколько вид фоновый (удаление ресурсов данных было проверено) для обеспечения потока обработки, если вам нужно написать взгляды принадлежит этим пять, вы можете просмотреть повторное использование кода через наследование соответствующих классов расширения, уменьшить код, который я написал сумма.

Пять продлены необходимостью соответствовать GenericAPIViewродительскому классу, так как реализация пять класса расширений нужно вызвать GenericAPIViewметод с последовательностью запросов к базе данных при условии.

1,1 ListModelMixin

Расширение представления списка класса, предусмотрен list(request, *args, **kwargs)способ быстро Просмотреть список 200 возвращает код состояния.

  1. Обеспечить listметоды для достижения быстрого просмотра списка
  2. Позвоните , чтобы GenericAPIViewустановить хороший набор результатов
  3. Позвоните , чтобы GenericAPIViewустановить хороший сериалайзер

Это метод фильтрации данных и пейджинга.Mixinlist()

Источник:

from rest_framework.mixins import ListModelMixin

class ListModelMixin(object):
    """
    List a queryset.
    """
    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)

Например:

from rest_framework.mixins import ListModelMixin
from rest_framework.generics import GenericAPIView

class BookListView(ListModelMixin, GenericAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer

    def get(self, request):
        return self.list(request)

1.2 CreateModelMixin

Создание вида класса расширения , который обеспечивает create(request, *args, **kwargs)способ быстро реализовать свои ресурсы , чтобы создать представление, успешное возвращение 201 код состояния.

  1. Обеспечить create(request, *args, **kwargs)способ быстро добиться создания зрения ресурсов
  2. Фактическая последовательность , созданная функцией saveполного метода
  3. saveПризывы метод будет идти сериализовать'S createметод

Если последовательность отказа аутентификации передачи данных переднего конца, возвращает 400 об ошибке.

Источник:

from rest_framework.mixins import CreateModelMixin

class CreateModelMixin(object):
    """
    Create a model instance.
    """
    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)

    def perform_create(self, serializer):
        serializer.save()

    def get_success_headers(self, data):
        try:
            return {'Location': str(data[api_settings.URL_FIELD_NAME])}
        except (TypeError, KeyError):
            return {}

1,3 RetrieveModelMixin

Удлинитель детальный вид класса, предусмотрен retrieve(request, *args, **kwargs)способ, он может быть реализован быстро вернуться к текущему объекту данных.

Если да, то вернуться к 200, в противном случае 404.

Источник:

from rest_framework.mixins import RetrieveModelMixin

class RetrieveModelMixin(object):
    """
    Retrieve a model instance.
    """
    def retrieve(self, request, *args, **kwargs):
        # 获取对象,会检查对象的权限
        instance = self.get_object()
        # 序列化
        serializer = self.get_serializer(instance)
        return Response(serializer.data)

Например:

from rest_framework.mixins import RetrieveModelMixin
from rest_framework.generics import GenericAPIView

class BookDetailView(RetrieveModelMixin, GenericAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer

    def get(self, request, pk):
        return self.retrieve(request)

1.4 UpdateModelMixin

Обновление класс расширения вида предусмотрен update(request, *args, **kwargs)способ

  1. Он может быть реализован быстро обновить существующий объект данных.
  2. Он также предоставляет partial_update(request, *args, **kwargs)методы могут быть реализованы частичное обновление.
  3. Внутренняя функция обновления вызывает десериализатор saveметод
  4. saveМетод требует сериализатором по updateметоду

200 успешное возвращение, когда проверка сериализатору данных не удается, возвращает 400 об ошибке.

Источник:

from rest_framework.mixins import UpdateModelMixin

class UpdateModelMixin(object):
    """
    Update a model instance.
    """
    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)

        if getattr(instance, '_prefetched_objects_cache', None):
            # If 'prefetch_related' has been applied to a queryset, we need to
            # forcibly invalidate the prefetch cache on the instance.
            instance._prefetched_objects_cache = {}

        return Response(serializer.data)

    def perform_update(self, serializer):
        serializer.save()

    def partial_update(self, request, *args, **kwargs):
        kwargs['partial'] = True
        return self.update(request, *args, **kwargs)

1,5 DestroyModelMixin

Удалять View класс расширения предусмотрен destroy(request, *args, **kwargs)способом, он может быть реализован быстро удалить существующий объект данных.

Успешное возвращение 204, 404 нет возврата.

Источник:

from rest_framework.mixins import DestroyModelMixin

class DestroyModelMixin(object):
    """
    Destroy a model instance.
    """
    def destroy(self, request, *args, **kwargs):
        instance = self.get_object()
        self.perform_destroy(instance)
        return Response(status=status.HTTP_204_NO_CONTENT)

    def perform_destroy(self, instance):
        instance.delete()

Использование GenericAPIViewи расширенный класс представления , который реализует apiинтерфейс, код:

"""GenericAPIView结合视图扩展类实现api接口"""
from rest_framework.generics import GenericAPIView
from rest_framework.mixins import ListModelMixin,CreateModelMixin

class Students2GenericAPIView(GenericAPIView,ListModelMixin,CreateModelMixin):
    # 本次视图类中要操作的数据[必填]
    queryset = Student.objects.all()
    # 本次视图类中要调用的默认序列化器[玄天]
    serializer_class = StudentModelSerializer

    def get(self, request):
        """获取多个学生信息"""
        return self.list(request)

    def post(self,request):
        """添加学生信息"""
        return self.create(request)

from rest_framework.mixins import RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin
from rest_framework.generics import GenericAPIView

class Student2GenericAPIView(GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin):
    queryset = Student.objects.all()

    serializer_class = StudentModelSerializer

    # 在使用GenericAPIView视图获取或操作单个数据时,视图方法中的代表主键的参数最好是pk
    def get(self,request,pk):
        """获取一条数据"""
        return self.retrieve(request,pk)

    def put(self,request,pk):
        """更新一条数据"""
        return self.update(request,pk)

    def delete(self,request,pk):
        """删除一条数据"""
        return self.destroy(request,pk)

Два, общий вид подкласс

2,1 CreateAPIView

Предоставлять postметоды

Наследуется от: GenericAPIView`CreateModelMixin

2,2 ListAPIView

Предоставлять getметоды

Наследуется GenericAPIViewот: ,ListModelMixin

2,3 RetrieveAPIView

Предоставлять getметоды

Наследуется GenericAPIViewот: ,RetrieveModelMixin

2,4 DestoryAPIView

Предоставлять deleteметоды

Наследуется GenericAPIViewот: ,DestoryModelMixin

2.5 UpdateAPIView

Предоставлено putи patchметоды

Наследуется GenericAPIViewот: ,UpdateModelMixin

2,6 RetrieveUpdateAPIView

При условии get, put, patchметод

Наследуется GenericAPIViewот: RetrieveModelMixin,,UpdateModelMixin

2,7 RetrieveUpdateDestoryAPIView

Обеспечить get, put, patch, deleteметод

Наследуется GenericAPIViewот: RetrieveModelMixin, UpdateModelMixin,,DestoryModelMixin

рекомендация

отwww.cnblogs.com/Dr-wei/p/11735509.html
рекомендация