В чем разница между миксинами и дженериками?

Я изучаю Django Rest Framework. И есть две концепции, которые с моей точки зрения почти одинаковы, и они используются в разных сценариях.

rest_framework mixins Я думаю, что они используются, когда мы используем представления. И rest_framework generics используются с APIViews.

В чем разница между этими двумя компонентами?


person Jacobo    schedule 07.04.2019    source источник
comment
Если у вас когда-нибудь будет время, я настоятельно рекомендую пройти эту подробное руководство по django CBV — оно длинное, но его стоит прочитать, оно должно прояснить все сомнения, связанные с миксинами, а что нет.   -  person henriquesalvaro    schedule 08.04.2019


Ответы (1)


Модули generics и mixin действительно разные, но они взаимосвязаны.

Django Rest Framework (DRF) отделяет поведение команды ReSTful API/HTTP от операций модели Django и организует набор абстрактных/базовых классов для каждого из них. Функциональность ReSTful находится в APIView, GenericAPIView и ViewSetMixin. Операции, связанные с Моделью, реализованы в модуле mixin.

Затем DRF использует множественное наследование Python и шаблон миксина, чтобы объединить их вместе в классы более высокого уровня, которые можно использовать и расширять.

Общие представления и конкретные ModelViewSet оба наследуют от APIView в дополнение к составлению функциональности через классы mixin.


Хотя это и не связано с вопросом, может оказаться полезным следующее наблюдение о ViewSet...

Ниже приведено введение в ViewSets на сайте DRF, из-за которого все может показаться более сложным, чем оно есть на самом деле...

Класс ViewSet — это просто тип представления на основе класса, который не предоставляет никаких обработчиков методов, таких как .get() или .post(), а вместо этого предоставляет такие действия, как .list() и .Создайте().

Обработчики методов для ViewSet привязаны к соответствующим действиям только в момент завершения представления с использованием метода .as_view().

Вместо прямого наследования ViewSet во многих случаях имеет смысл унаследовать ModelViewSet и объединить его с DefaultRouter. ModelViewSet получает обработчики методов через различные классы mixin, а DefaultRouter обеспечивает сопоставление функции "действие".

В сочетании все основные действия REST могут быть выполнены с данной Моделью с очень небольшим количеством кода.

person Dwight Gunning    schedule 08.04.2019