© 2020, Developed by Hieu Dev

Tìm hiểu về ModelViewSet – Django REST Framework

ModelViewSet là một tập hợp view với các method sẵn có dựa trên một model object. Các class ModelViewSet kế thừa lớp từ GenericAPIView và nó bao gồm việc triển khai cho những hành động khác nhau, bằng cách mix những behavior của các lớp mixin khác nhau.


Những hành động được cung cấp bởi ModelViewSetlớp là .list(), .retrieve(), .create(), .update(), .partial_update(), và .destroy().

ModelViewSet bao gồm một GenericViewSet và các class model mixins:

  • mixins.CreateModelMixin,
  • mixins.RetrieveModelMixin,
  • mixins.UpdateModelMixin,
  • mixins.DestroyModelMixin,
  • mixins.ListModelMixin,
  • GenericViewSet

class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    """
    A viewset that provides default `create()`, 
    `retrieve()`, `update()`, `partial_update()`, 
    `destroy()` and `list()` actions.
    """
    pass


Ví dụ, ta có:

# views.py 
from rest_framework.viewsets import ModelViewSet 

from .models import Book
from .serializers import BookSerializer

class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer


Cụ thể code trên ta có:
  • Lấy danh sách tất cả sách: GET /books/
  • Lấy một sách theo id: GET /books/{id}/
  • Thêm sách mới: POST /books/
  • Cập nhật thông tin sách: PUT /books/{id}/
  • Cập nhật thông tin sách theo id: PATCH /books/{id}/
  • Xóa sách: DELETE /books/{id}/

Thuộc tính của ModelViewSet

ModelViewSet có 3 thuộc tính: queryset, serializer_class, permission_classes
  • Thuộc tính `queryset` để xác định ta làm việc với đối tượng nào. Ví dụ ta dùng cho object là sách thì queryset bây giờ sẽ là Book.objects.all().
  • Thuộc tính `serializer_class` dùng để chỉ định các serializer, xác định cách bạn muốn chuyển đổi các đối tượng từ model thành JSON và những field nào muốn đưa vào.
  • Thuộc tính `permission_classes` dùng để xác định là ai có quyền được truy cập vào các endpoints, và các quyền được tạo ra viewset này.

Hieu Ho.

Đăng nhận xét

Mới hơn Cũ hơn