Просмотр последовательности сборки семейства ФПИ

Во-первых, вид семейства классификации

1. Импорт Категория
from rest_framewok import views, generics, mixins, viewsets

просмотров: класс представления

Просмотреть две категории: APIView, GenericAPIView

from rest_framework.views import APIView
from rest_framework.generics import GenericAPIView

Примеси: Просмотр Инструменты

Шесть вид инструментов: RetrieveModelMixin, ListModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin

from rest_framework.mixins import RetrieveModelMixin, ListModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin

генерики: Инструменты просмотра класс

Девять инструментов просмотр класса: ...

from rest_framework import generics

viewsets: Просмотреть наборы

Просмотреть Набор Два базовых классов: Viewset, GenericViewSet

from rest_framework import viewsets

2.APIVIiew особенности

Он наследует View Джанго

1) Вид: Тот же метод по требованию к представлению класса отображения, в ответ на запрос на полный

2) APIView:

Просмотр сохранены все функции;

Перепишите as_view инвалидов сертификации CSRF;

Rewrite отправка: запрос, ответ, рендеринг, исключение, разбор, три сертификации

Пучок атрибутов мульти-класса может быть достигнуто частичный класс вида

Во-вторых, использование и разница между этими двумя видами просмотра класс просмотра класса

APIView:

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

# APIView:
class StudentAPIView(APIView):
    def get(self, request, *args, **kwargs):
        # 群查
        stu_query = models.Sudent.objects.all()
        stu_ser = serializers.StudentModelSerializer(stu_query,many=True)
        print(stu_ser)
        return Response(stu_ser.data)

GenericAPIView:

# GenericAPIView:
from rest_framework.generics import GenericAPIView

class StudentGenericAPIView(GenericAPIView):
    queryset = models.Sudent.objects.all()
    serializer_class = serializers.StudentModelSerializer
    def get(self, request, *args, **kwargs):
        # 群查
        # stu_query = models.Sudent.objects.all()
        stu_query = self.get_queryset()
        # stu_ser = serializers.StudentModelSerializer(stu_query,many=True)
        stu_ser = self.get_serializer(stu_query, many=True)

        return Response(stu_ser.data)

Разница:

1.GenericAPIView унаследовал APIView, так что он может быть использован для всех функций APIView ,
предусмотренного внутри три общих методы 2.GenericAPIView:
что get_object (): получить целевую последовательность одного препарата для одной проверки
get_queryset (): Get содержащих QuerySet множество объектов данных, проверка группа
get_serializer (): получить сериализовать в сериализаторе объекты
3. три общих признака:
QuerySet
serializer_class
lookup_url_kwarg

В-третьих, вид использования и инструментов внедрения подмешать

Увеличение одиночных и групповых проверки, например:

from rest_framework import mixins
class StudentMixinGenericAPIView(mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView):
    queryset = models.Sudent.objects.all()
    serializer_class = serializers.StudentModelSerializer
    # 群查
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    # 单增
    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

Особенности:
1. Предоставление пять и шесть инструментов Инструменты Метод:
CreateModelMixin: Create () , реализуемые одним
ListModelMixin: список () группы для достижения поиска
RetrieveModelMixin: получить () для проверки одного
UpdateModelMixin: обновление () и изменить одну perform_update () реализован локально модифицированный
DestroyModelMixin: уничтожить () одного удалено

2. До тех пор, как инструменты вызова метода, можно реализовать функцию методы, внутренний принцип осуществления называется код, который мы написали перед слоем упаковки, так что вы можете позвонить нам напрямую

3. Из-за Mixins пяти инструментов в классе не наследуется ни взгляды вида класса, нет методы as_view () в URL распределения, что не любая CRUD, поэтому при написании класса наследует класс представления GenericAPIView

В-четвертых, вид класса Mixin использование инструмента и внедрение

# 工具视图类
from rest_framework.generics import CreateAPIView, RetrieveAPIView, ListAPIView,UpdateAPIView,DestroyAPIView
class StudentMixinAPIView(CreateAPIView,ListAPIView,RetrieveAPIView,UpdateAPIView,DestroyAPIView):
    queryset = models.Sudent.objects.all()
    serializer_class = serializers.StudentModelSerializer
    # url中单查,不一定必须提供主键,提供一切唯一键的字段名均可
    lookup_url_kwarg = 'id'

    # 有删除需求的接口继承DestroyAPIView,重写destroy完成字段删除
    def destroy(self, request, *args, **kwargs):
        pass
 

Анализ:

lookup_url_kwarg: URL специфичной проверки, не обязательно должны обеспечить первичный ключ, уникальный ключ имя поля, чтобы предоставить всю банку, URL конфигурации должен быть изменен на ид рк

Преимущества:

CreateAPIView, ListAPIView, RetrieveAPIView, UpdateAPIView, DestroyAPIView пять инструментов интеграции Примеси и GenericAPIView внутри класса. Они будут делать еще один пакет получит, пост ... и другие способы упаковки вместе, мы имеем прямой преемник метод класса.
Недостатки:

Исследование Шань Чжа не могут сосуществовать с группой, определяет порядок следования по единому чек или чек группы, набор представлений описано ниже может быть сделано сосуществуют.

V. Использование с введением зрения набора

# 视图集
from rest_framework.viewsets import ModelViewSet
class StudentModelViewSet(ModelViewSet):
    queryset = models.Sudent.objects.all()
    serializer_class = serializers.StudentModelSerializer

    def mypost(self, request, *args, **kwargs):
        return Response('my post ok')

Анализ:

См причины из исходного кода, используя набор представлений, которые могут быть достигнуты с помощью одного чека, чтобы проверить группы сосуществуют:

ModelViewSet наследство за пределами пяти инструментов также унаследовал GenericViewSet

GenericViewSet унаследовал Viewset затем унаследовал ViewSetMixin

В ViewSetMixin класс, который переписывает метод as_view (), в соответствии с отношением наследования, если согласование на маршруте, метод as_view () из ViewSetMixin идти. В своем методе as_view (), который, с помощью которого способ передачи параметров as_view (), соответствующие инструменты Метод:

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

В конфигурации URL маршрутизации, так что мы можем проверить разницу между одним и группой проверены:

Мы можем также переопределить соответствующий метод запроса, чтобы выполнить их самостоятельно. Для достижения особых потребностей.

Примечание: код может быть известно из вышеизложенного: В дополнение к наследованию представление класса APIView, другой класс представления должен быть установлен в классе два свойства:

queryset = models.Student.objects.all()  # 代表跟哪张表建立关系
serializer_class = serializers.StudentModelSerializer  # 指明用的是哪个序列化器

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

отwww.cnblogs.com/guapitomjoy/p/11924775.html