博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2 Django REST Framework 开发 ---- APIView
阅读量:6800 次
发布时间:2019-06-26

本文共 1663 字,大约阅读时间需要 5 分钟。

APIView

通过看源码可以发现 APIView 直接继承了 Django View 这个基类,在此基础上添加了 render_classes, parser_classes, authentication_classes 等等,由此可见 APIView 还是比较偏底层的, 但通过使用它可以相对灵活实现一些自定义功能。

介绍APIView:

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

参照:

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 products12    """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" method22             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

你可能感兴趣的文章
arcgis portal使用问题及解决方法
查看>>
nagios 主机组定义
查看>>
用yum来安装或卸载CentOS图形界面包
查看>>
我的友情链接
查看>>
linux
查看>>
H3C华为交换机破解console密码
查看>>
2015年11月8日-11月17日课程作业
查看>>
配置节点归档间归档文件的自动发送 archive log
查看>>
Linux实验报告-源代码编译安装Apache(Tarball文件安装)
查看>>
解决CMake Error: The source directory "*" does not appear to contain CMakeLists.txt.
查看>>
VDI序曲二十四 APP-V客户端安装及虚拟应用程序体验
查看>>
shell脚本
查看>>
mysql 报错:error while loading shared libraries: libmysqlclient.so.15
查看>>
解构赋值
查看>>
php strtotime 和 date 日期操作
查看>>
【翻译】使用Ext JS设计响应式应用程序
查看>>
Java窗体的应用
查看>>
编译原理龙书学习记录(一)
查看>>
SpringBoot整合ssm中删除
查看>>
Java 知识点(二)
查看>>