2 Django REST Framework 开发 ---- APIView

本文详细解析了Django REST framework中的APIView类,对比Django原生View,介绍了其如何处理客户端请求及响应,展示了通过自定义功能增强API灵活性的方法。

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

APIView

通过看源码可以发现 APIView 直接继承了 Django View 这个基类,在此基础上添加了 render_classes, parser_classes, authentication_classes 等等,由此可见 APIView 还是比较偏底层的, 但通过使用它可以相对灵活实现一些自定义功能。
介绍APIView: https://www.django-rest-framework.org/api-guide/views/

APIView 类与 Django原生View 有以下区别:

  • 当客户端发来请求会被 DRF 的 Request 对象中的 handler 方法(get, post etc.) 处理,而非 Django 的 HttpRequest 对象
  • Handler 方法返回 DRF 的 Request 对象, View 会管理返回结果最终渲染回 Response
  • 任何 APIException 都会被捕获且返回相应的报错
  • 收到的客户端请求会先被进行权限认证等步骤后才分发给 handler 方法

在使用上 APIView 类与 View 几乎相差不大。收到的客户端请求会被分发到相关的 handler 方法如:.get(), .post()。由于不同 API 的 policy 的不同,APIView 中设置了相应的属性。

下面编写一个简单的 view.py with APIView
参照: https://www.django-rest-framework.org/tutorial/3-class-based-views/

 1 from products.models import Product
 2 from products.serializers import ProductSerializer
 3 from django.http import Http404
 4 from rest_framework.views import APIView
 5 from rest_framework.response import Response
 6 from rest_framework import status
 7 
 8 
 9 class ProductListView(APIView):    
10    """
11    List all products
12    """
13     def get(self, request, format=None):
14         products = Product.objects.all()
15         products_serializer = ProductSerializer(products, many=True)  # 序列化 products 对象成 json 格式;many 表示返回多条数据
16         return Response(products_serializer.data)
17 
18     def post(self, request, format=None):
19         serializer = ProductSerializer(data=request.data)
20         if serializer.is_valid():
21             serializer.save()  # call serializer "create" method
22             return Response(serializer.data, status=status.HTTP_201_CREATED)
23         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

注: ProductSerializer 实现见之前的文章 (https://www.cnblogs.com/crazy-chinese/p/9828095.html)

 

转载于:https://www.cnblogs.com/crazy-chinese/p/9828103.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值