GenericAPIView的接口实现调用方法学习

本文详细介绍了如何在Django中使用GenericAPIView实现增删改查功能,包括序列化器的编写、类视图的定义、URL路由配置以及测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


GenericAPIView的接口实现调用方法学习


一、在serializser.py编写序列化器继承于ModelSerializser

       序列化器没变化!

二、在views.py编写类视图继承于GenericAPIView
from rest_framework.generics import GenericAPIView
class PublishView(GenericAPIView):
   queryset = Publish.objects
   serializer_class = PublishSerializer
   def get(self, request):
       #serializer = self.serializer_class(instance = self.queryset,many=True)
       #serializer = self.get_serializer_class()(instance = self.queryset,many=True)
       serializer = self.get_serializer(instance = self.get_queryset(),many=True)
       return Response(serializer.data)

   def post(self,request):
        serizlizer = self.get_serializer(data=request.data)    #反序列化器
        #数据校验
        #验证通过   serializer.data
        #验证不通过  serializer.errors
        if serizlizer.is_valid():
            # Author.objects.create(**serializer.validated_data)   这种原始传入数据的方法
            # return Respons("OK")
            serizlizer.save()
            return Response(serizlizer.data)
        else:
            return Response(serizlizer.errors)

class PublishDetailView(GenericAPIView):
    queryset = Publish.objects
    serializer_class = PublishSerializer
    def get(self, request, pk):
            serializer = self.get_serializer(instance=self.get_object(), many=False)
            return Response(serializer.data)
    def put(self, request, pk):
        serializer = self.get_serializer(instance=self.get_object(), data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors)
    def delete(self, request, pk):
        self.get_object().delete()
        return Response()

三、在urls.py增加路由表
from .views import PublishView, PublishDetailView

urlpatterns = [
   path('publish/', PublishView.as_view()),
   re_path('publish/(?P<pk>\d+)/', PublishDetailView.as_view())
]

四、测试

get post
http://127.0.0.1:8000/stu/publish

put delete get
http://127.0.0.1:8000/stu/publish/1/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值