Django REST framework 学习笔记(三)

Django REST framework 学习笔记(三)

使用mixins和generics

  • mixins是一个基于类的API视图
  • generics用来创建API视图
  • 使用基于类的API视图最大的好处是我们可以编写可重复使用的方法
  • 这次我们使用mixins类进行编写API的增删查改功能
  • 我们将使用mixins实现用更加简洁的代码来编写
  • 接下来的操作都是在前面项目的基础上
  • 编写views.py文件
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework import mixins
from rest_framework import generics

class SnippetList(mixins.ListModelMixin,
                  mixins.CreateModelMixin,
                  generics.GenericAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)


class SnippetDetail(mixins.RetrieveModelMixin,
                    mixins.UpdateModelMixin,
                    mixins.DestroyModelMixin,
                    generics.GenericAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)
        
  • 我们使用了GenericAPIView来创建API视图,并且添加上mixins类提供的ListModelMixinCreateModelMixin
    以及RetrieveModelMixinUpdateModelMixinDestroyModelMixin
  • mixins类提供了.list().create().retrieve().update().destroy()操作
    分别对应getpostgetputdelete 方法
mixins操作请求方法响应
ListModelMixin.list()get获取所有实例
CreateModelMixin.create()post增加实例
RetrieveModelMixin.retrieve()get获取单个实例
UpdateModelMixin.update()put修改实例
DestroyModelMixin.destroy()delete删除实例
  • generics类还有更加简洁的写法,使得我们的代码更加干净,节省更多的时间
  • 即将ListModelMixinCreateModelMixinGenericAPIView合并到一起变为ListCreateAPIView
  • RetrieveModelMixinUpdateModelMixinDestroyModelMixinGenericAPIView合并到一起变为RetrieveUpdateDestroyAPIView
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework import generics


class SnippetList(generics.ListCreateAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer


class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    
  • 只用了极少的代码就实现了跟上面一样的功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_linbobo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值