# GenericAPIView继承自APIVIew,增加了对于列表视图和详情视图可能用到的通用支持方法。
# 常用属性
'''
  queryset         列表视图的查询集
  serializer_class 视图使用的序列化器
  pagination_class 分页控制类
  filter_backends  过滤控制后端
  lookup_field     查询单一数据库对象时使用的条件字段,默认为'pk'
  lookup_url_kwarg 查询单一数据时URL中的参数关键字名称,默认与look_field相同
'''
# 常用方法:
'''
  get_queryset(self)    返回视图使用的查询集,是列表视图与详情视图获取数据的基础,默认返回queryset属性
  get_serializer_class(self)  返回序列化器类,默认返回serializer_class
  get_serializer(self, args, *kwargs)  返回序列化器对象,被其他视图或扩展类使用,如果    我们在视图中想要获取序列化器对象,可以直接调用此方法
  get_object(self)  返回详情视图所需的模型类数据对象,默认使用lookup_field参数来过滤  queryset。 在试图中可以调用该方法获取详情信息的模型类对象。
'''
# 扩展类:
'''
  ListModelMixin列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码
  CreateModelMixin创建视图扩展类,提供create(request, *args, **kwargs)方法快速实现创建资源的视图,成功返回201状态码
  RetrieveModelMixin详情视图扩展类,提供retrieve(request, *args, **kwargs)方法,可以快速实现返回一个存在的数据对象
  UpdateModelMixin更新视图扩展类,提供update(request, *args, **kwargs)方法,可以快速实现更新一个存在的数据对象
  DestroyModelMixin删除视图扩展类,提供destroy(request, *args, **kwargs)方法,可以快速实现删除一个存在的数据对象
'''
视图函数继承
class BookView(RetrieveModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin, GenericAPIView):
    # 属性
    queryset = TuShu.objects.all()  # 查询结果集
    serializer_class = TuShuSerializer  # 序列化集
    lookup_field = "tid"
    # RetrieveModelMixin扩展类
    def get(self, request, tid):  # 查询单条
        return self.retrieve(request)
    # CreateModelMixin 添加扩展类
    def post(self, request):
        return self.create(request)
    # UpdateModelMixin更新扩展类
    def put(self, request, tid):
        return self.update(request)
    
    # DestroyModelMixin删除扩展类
    def delete(self, request, tid):
        return self.destroy(request)
# 路径
    path('bookview/<tid>/', BookView.as_view()),
    path('bookview/', BookView.as_view()),