前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年04月 Python教学课程 66-DRF框架之APIView

【愚公系列】2022年04月 Python教学课程 66-DRF框架之APIView

作者头像
愚公搬代码
发布2022-04-18 07:59:33
5870
发布2022-04-18 07:59:33
举报
文章被收录于专栏:历史专栏历史专栏

文章目录


一、APIView

REST框架提供了一个类APIViewView,APIView类在以下方面与常规类不同,它是继承于View类。

传递给处理程序方法的请求将是REST框架的实例,而不是Django的实例。

  • RequestHttpRequest处理程序方法可以返回REST框架,而不是Django的。并在响应上设置正确的呈现器。
  • ResponseHttpResponse任何异常都将被捕获并调解为适当的响应。
  • APIException传入的请求将经过身份验证,并且在将请求调度到处理程序方法之前,将运行适当的权限和/或限制检查。

使用该类与使用常规类几乎相同,像往常一样,传入的请求被调度到适当的处理程序方法。此外,可以在控制 API 策略各个方面的类上设置许多属性。

代码语言:javascript
复制
from rest_framework.views import APIView
from rest_framework.response import Response

from book.models import BookInfo
from drf_book.serializer import BookSerializer


class BooksAPIView(APIView):
    """
           获取所有图书和保存图书
    """

    def get(self, request):
        """
            获取所有图书
        :param request:
        :return:
        """
        # 1、查询图书表获取所有图书对象
        books = BookInfo.objects.all()
        # 2、提取所有对象的字段内容
        # 初始化生成序列化器对象
        ser = BookSerializer(books, many=True)
        # 使用序列化器对象的data方法获取序列化后的结果
        data = ser.data
        # 3、返回所有对象字段内容
        return Response({'book_list': data})

    def post(self, request):
        """
            保存图书
        :param request:
        :return:
        """
        # 1、获取保存的图书数据
        data=request.data
        # 2、验证图书数据字段
        ser = BookSerializer(data=data)
        # is_valid是序列化器的验证方法
        ser.is_valid(raise_exception=True)  # raise_exception=True 验证失败直接返回
        # ser.errors获取验证结果信息
        # 3、保存图书
        # 调用序列化器中封装保存方法create
        ser.save()

        return Response(ser.data)

class BookAPIView(APIView):
    """
           获取单一图书数据
           更新图书
           删除图书
       """

    def get(self, request, pk):
        """
        获取单一图书数据
        :param request:
        :param pk:
        :return:
        """
        # 1、根据pk值查询图书对象
        try:
            book = BookInfo.objects.get(id=pk)
        except:
            return Response({'error': '错误的id值'})
        # 2、返回图书数据
        ser = BookSerializer(book)
        return Response(
            ser.data
        )

    def put(self, request, pk):
        """
         更新图书
        :param request:
        :param pk:
        :return:
        """
        # 1、获取保存的图书数据
        data = request.data
        # 2、验证图书数据字段
        try:
            book = BookInfo.objects.get(id=pk)
        except:
            return Response({'error': '错误的id值'})
        ser = BookSerializer(book, data=data)
        # is_valid是序列化器的验证方法
        ser.is_valid(raise_exception=True)  # raise_exception=True 验证失败直接返回
        # 3、更新图书
        ser.save()
        # # 4、返回保存后的图书数据
        return Response(ser.data)

    def delete(self, request, pk):
        """
        删除图书
        :param request:
        :param pk:
        :return:
        """
        # 1、查询删除的图书对象
        try:
            book = BookInfo.objects.get(id=pk)
        except:
            return Response({'error': '错误的id值'})
        # 2、逻辑
        book.is_delete = True
        book.save()
        # 物理删除
        # book.delete()

        # 3、返回结果
        return Response({})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、APIView
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档