Во-первых, вид семейства классификации
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 # 指明用的是哪个序列化器