from rest_framework.generics import GenericAPIView
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin
一、GenericAPIView 基类
GenericAPIView 继承自 APIView,主要增加了操作序列化和数据库查询的方法,作用是为下面 Mixin 扩展类的执行提供方法支持。通常在使用时,可搭配一个或多个 Mixin 扩展类。
指明视图使用的序列化器
① 通过属性:
serializer_class
② 通过方法:
get_serializer_class(self)
get_serializer(self, args, *kwargs)
数据库查询的属性与方法
指明使用的数据查询集
① 通过属性
queryset
② 通过方法
get_queryset(self)
get_object(self)
class BookListView(GenericAPIView):
"""使用GenericAPIView实现“获取所有图书信息”接口"""
serializer_class = BookSerializer # 指定序列化器
queryset = Book.objects.all() # 指定查询集
def get(self, reqeust):
"""获取所有图书信息 GET /books/ :param reqeust: Request类型的对象 :return: JSON"""
book = self.get_queryset() # 获取查询集
serializer = self.get_serializer(book, many=True)# 创建序列化器对象
return Response(serializer.data) # 响应序列化后的数据
二、GenericAPIView 扩展类
GenericAPIView 的五个拓展类提供了五个方法分别进行增删改查的不同操作。
搭配 GenericAPIView 使用
ListModelMixin 提供 list 方法快速实现列表视图
CreateModelMixin 提供 create 方法快速实现创建资源的视图
RetrieveModelMixin 提供 retrieve 方法,可以快速实现返回一个存在的数据对象(传入pk)
UpdateModelMixin 提供 update 方法,可以快速实现更新一个存在的数据对象。提供 partial_update 方法,实现局部更新
DestroyModelMixin 提供 destroy 方法,快速实现删除一个存在的数据对象
class BookDetailView(mixins.RetrieveModelMixin, GenericAPIView):
"""使用GenericAPIView实现“获取单一图书信息”接口"""
serializer_class = BookSerializer # 指定序列化器
queryset = Book.objects.all() # 指定查询集
def get(self, request, pk):
"""获取单一图书信息 GET /books/<pk>/ :param request: Request类型的对象 :return: JSON"""
return self.retrieve(request)
推荐
Django-DRF | ModelSerializer 序列化
点一下阅读原文吐槽云团小公举吧~
本文分享自微信公众号 - 数据云团(SmartData)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4581358/blog/4369815