ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

drf基本视图类APIView

2022-09-07 12:34:09  阅读:238  来源: 互联网

标签:return APIView 视图 Student pk Response serializer drf


rest_framework.views.APIView

APIView是REST framework提供的所有视图类的基类,继承自Django的view父类

APTview与view的不同之处在于:

  传入到视图方法中的是REST framework的Request对象,而不是Django的 HttpRequeset对象

    视图方法可以返回REST framework的Response对象,视图会为响应数据设置(renderer)符合前端期望要求的格式

  任何 APIException异常都会被捕获到,并且处理成合适格式的响应信息返回给客户端

    django的View中所有异常全部以HTML格式显示

    drf的APIVlew或者APIView的子类会自动根据客户端的Accept进行错误信息的格式转换

  重新声明了一个新的as_view方法并在dispatch()进行路由分发前,会对请求的客户端进行身份认证、权限检查、流量控制

 

APIView除了继承了View原有的属性方法意外,还新增了类属性:

   authentication_classes列表或元组,身份认证类

  permissoin_classes列表或元组,权限检查类

  throttle_classes列表或元祖,流量控制类

在APIview中仍以常规的类视图定义方法来实现get(). post()或者其他请求方式的方法。

from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Student
from .serializers import StudentModelSerializer


class StudentAPIView(APIView):
    def get(self,request):
        #1.数据库中读取学生列表信息
        student_list=Student.objects.all()
        #2.实例化序列化器,获取序列化对象
        serializer=StudentModelSerializer(instance=student_list,many=True)
        #3.转换数据并返回给客户端
        return Response(serializer.data,status=200)

    def post(self,request):
        #1.获取客户端提交的数据,实例化序列化器,获取序列化对象
        serializer=StudentModelSerializer(data=request.data)
        #2.反序列化[验证数据、保存数据到数据库]
        serializer.is_valid(raise_exception=True)
        serializer.save()
        #3.返回
        return Response(serializer.data,status=201)

class StudentInfoAPIView(APIView):
    def get(self,request,pk):
        #1.获取数据
        try:
            student=Student.objects.get(pk=pk)
        except Student.DoesNotExist:
            return Response({"error":"查无此人"},status=404)
        #2.序列化
        serializer=StudentModelSerializer(instance=student)
        #3.返回
        return Response(serializer.data)
    
    def put(self,request,pk):
        #1.获取数据库数据
        try:
            student=Student.objects.get(pk=pk)
        except Student.DoesNotExist:
            return Response({"error":"查无此人"},status=404)
        #2.获取客户端数据
        serializer=StudentModelSerializer(instance=student,data=request.data)
        #3.反序列化[验证数据、保存数据到数据库]
        serializer.is_valid(raise_exception=True)
        serializer.save()#包括创建和更新
        #4.返回
        return Response(serializer.data,status=201)
    
    def delete(self,request,pk):
        #1.获取数据并删除
        try:
            Student.objects.get(pk=pk).delete()
        except Student.DoesNotExist:
            return Response({"error":"查无此人"},status=404)
        #2.返回结果
        return Response(status=204)

urls:

from django.urls import path,re_path
from . import views

# 路由列表
urlpatterns = [
    path("students/",views.StudentAPIView.as_view()),
    re_path(r"students/(?P<pk>\d+)/",views.StudentInfoAPIView.as_view())
    
]

 

标签:return,APIView,视图,Student,pk,Response,serializer,drf
来源: https://www.cnblogs.com/fuck-Innovative-training/p/16664396.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有