viewsets

viewsets

功能也能常规使用一样,只是方式有点不一样,需要在urls.py里添加限制
屏幕快照 2018-11-19 上午12.23.39.png

viewsets

  • ViewSetMixin类里方法
    • as_view
    • initialize_request
    • reverse_action
    • get_extra_actions
    • get_extra_action_url_map
  • ViewSet 只继承两个类,没有代码
    • 继承ViewSetMixin
    • 继承APIView
  • GenericViewSet 只继承两个类,没有代码
    • 继承ViewSetMixin
    • 继承GenericAPIView
  • ReadOnlyModelViewSet 只继承3个类,没有代码
    • 继承GenericViewSet
      • 继承ViewSetMixin
      • 继承GenericAPIView
    • RetrieveModelMixin
    • ListModelMixin
  • ModelViewSet
    • 继承GenericViewSet
      • 继承ViewSetMixin
      • 继承GenericAPIView
    • 继承ListModelMixin 查多个
    • 继承RetrieveModelMixin 查
    • 继承UpdateModelMixin 改
    • 继承DestroyModelMixin 删除
    • 继承CreateModelMixin 增
dsf.png

sdfsdf46.png

model.py

from django.db import models


class Book(models.Model):
    b_name = models.CharField(max_length=32)

serializer.py

from rest_framework import serializers

from ViewSetLearn.models import Book


class BookSerializer(serializers.ModelSerializer):

    class Meta:
        model = Book
        fields = ("id", "b_name")

views.py

继承自viewsets.ModelViewSet

from rest_framework import viewsets

from ViewSetLearn.models import Book
from ViewSetLearn.serializers import BookSerializer


class BookViewSet(viewsets.ModelViewSet):

    serializer_class = BookSerializer
    queryset = Book.objects.all()

urls.py

as_views()里没加参数之前

sfsdfsdf3.png

"get": "list"获取所有
"post": "create"创建
"get": "retrieve" 获取单本

from django.conf.urls import url

from ViewSetLearn import views

# 创建书,  获取所有书, 获取单本书
urlpatterns = [
    url(r'^books/$', views.BookViewSet.as_view(
        {
            "get": "list",  # 获取所有
            "post": "create", # 创建
        }
    )),
    url(r'^books/(?P\d+)/', views.BookViewSet.as_view(
        {
            "get": "retrieve", # 获取单本
        }
    )),
]

你可能感兴趣的:(viewsets)