视图
视图 View
两个视图基类:APIView GenericAPIView
APIView
执行流程:新的reqeust,三大认证,全局异常
重写了as_view,dispatch
类属性:parser_class,xxx
GenericAPIView---》继承了APIView----》以后,如果是跟数据库打交道,尽量用它
1 queryset:要序列化或反序列化的表模型数据
2 serializer_class:使用的序列化类
3 lookup_field :查询单条的路由分组分出来的字段名
4 filter_backends:过滤类的配置(了解)
5 pagination_class:分页类的配置(了解)
方法
1 get_queryset :获取要序列化的对象
2 get_object :获取单个对象
3 get_serializer :获取序列化类 ,跟它差不多的get_serializer_class,一般重写它,不调用它
4 filter_queryset :过滤有关系(了解)
补充,根据请求方式,定制序列化类
def get_serializer(self, *args, **kwargs):
if self.request.method=='GET':
return 序列化单条的序列化类
else:
return 新增的序列化类
5个视图扩展类----》不是视图类----》必须配合GenericAPIView
每个类自己写了一个方法,写的不是【请求方式,不是put,get。。。】的方法,写的是list,destroy。。。
minxin 混入,通过多继承来实现多个功能
from rest_framework.mixins import CreateModelMixin, UpdateModelMixin, DestroyModelMixin, RetrieveModelMixin,
ListModelMixin
继承GenericAPIView+某个视图扩展类+请求方式的方法
9个视图子类
两个视图基类
5个视图扩展类
9个视图子类---》视图类,不需要额外继承GenericAPIView,只需要继承9个中其中某个,就会有某个或某几个接口
路由
urlpatterns = [
path('books/', views.BookView.as_view()),
path('books/<int:pk>/', views.BookView.as_view()),
]
视图类
from rest_framework.generics import ListAPIView, ListCreateAPIView, CreateAPIView, \
RetrieveAPIView, RetrieveUpdateDestroyAPIView, UpdateAPIView, DestroyAPIView
from .models import Book
from .serializer import BookSerializer
class BookView(ListCreateAPIView): # 查询所有,新增一个
queryset = Book.objects.all()
serializer_class = BookSerializer
# 新增一个,修改一个,删除一个
class BookDetailView(RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
因为这5个接口在不同的场景可能不需要全部都写 所以按照需求可以通过继承的父类的不同进行代码编写
eg:写一个查询所有
class BookView(ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
再写一个修改
class BookDetailView(UpdateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
标签:get,子类,queryset,视图,源码,序列化,class,serializer
From: https://www.cnblogs.com/xm15/p/17095629.html