Django REST Framework(九)GenericAPIView视图子类

GenericAPIView 是 Django REST Framework (DRF) 中一个非常重要的类,它提供了常用的通用视图功能。通过继承 GenericAPIView,可以轻松地构建 RESTful API。

用法

  1. 导入所需模块

    from rest_framework import generics 
    from .models import BookModel 
    from .serializers import BookModelSerializer
  2. 创建视图

    你可以创建一个视图类,继承 GenericAPIView,并指定相应的查询集和序列化器。

    class BookModelListCreateView(generics.GenericAPIView): 
        queryset = BookModel.objects.all() 
        serializer_class = BookModelSerializer 
    def get(self, request, *args, **kwargs): 
        queryset = self.get_queryset() 
        serializer = self.get_serializer(queryset, many=True) 
        return Response(serializer.data) 
    def post(self, request, *args, **kwargs): 
        serializer = self.get_serializer(data=request.data)                
        serializer.is_valid(raise_exception=True) 
        serializer.save() 
        return Response(serializer.data, status=201)
  3. 使用 Mixins

    GenericAPIView 可以与 mixins 一起使用,以实现更具体的功能,如获取、更新、删除等。

    from rest_framework import mixins 
    class BookModelListCreateView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView): 
        queryset = BookModel.objects.all() 
        serializer_class = BookModelSerializer 
    def get(self, request, *args, **kwargs): 
        return self.list(request, *args, **kwargs) 
    def post(self, request, *args, **kwargs): 
        return self.create(request, *args, **kwargs)
  4. 组合使用

    DRF 提供了多种组合类,如 ListCreateAPIViewRetrieveUpdateDestroyAPIView,这些都是 GenericAPIView 和 mixins 的组合。

    from rest_framework import generics 
    class BookModelListCreateView(generics.ListCreateAPIView): 
        queryset = BookModel.objects.all() 
        serializer_class = BookModelSerializer

常用功能

  • get_queryset():返回要查询的对象集合。
  • get_serializer():返回用于序列化和反序列化数据的序列化器实例。
  • perform_create():处理对象创建的逻辑,通常在 create() 方法中调用。

例子

from rest_framework import generics 
from .models import BookModel 
from .serializers import BookModelSerializer 
class BookModelDetailView(generics.RetrieveUpdateDestroyAPIView): 
    queryset = BookModel.objects.all() 
    serializer_class = BookModelSerializer

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值