APIView

  • 前言
  • 一、接收不同类型的参数
    • 1.1 json参数获取
    • 1.2 x-www-form-urlencoded参数获取
    • 1.3 form-data参数获取
    • 1.4 query string参数获取
    • 1.5 总结
  • 二、返回Response
  • 三、过滤
  • 四、提取
  • 总结

前言

APIView解决了一些之前的问题,例如认证授权功能,限流功能,传递参数的形式单一等问题。

一、接收不同类型的参数

修改views.py中的代码。使视图类继承APIView(APIView是View的子类)。
使用View视图我们接收到的request就是WSGIRequest对象或者HTTPRequest对象,但是使用APIView视图我们接收到的request就是Request对象。

# 需继承APIView
#class ProjectViews(View):
class ProjectViews(APIView):...
  • 1.1-1.4其实可以不看,直接看1.5。

1.1 json参数获取

此时想要取json参数就可以使用request.data来获取,而且不用像View视图那样还得转换,这里我们取到的结果直接就是dict格式。

1.2 x-www-form-urlencoded参数获取

此参数即可通过request.data获取,又可以兼容之前的request.POST方式获取。

1.3 form-data参数获取

此参数即可通过request.data获取,又可以兼容之前的request.POST方式获取。

1.4 query string参数获取

此参数即可通过request.query_params获取,又可以兼容之前的request.GET方式获取。

1.5 总结

不难发现,APIView视图获取参数时,query string参数使用request.query_params获取,其他参数都使用request.data获取,并且都兼容之前的获取参数的方式。

二、返回Response

APIView必须返回Response对象,Response拓展了HttpResponse。

class ProjectViews(APIView):def get(self, request: Request):...# return JsonResponse(serializer.data, safe=False, json_dumps_params={"ensure_ascii": False})# 第一个参数为Python中的常用数据类(字典或者嵌套字典的列表),serializer.data;status参数用于传递响应状态码# c.Response对象.data属性,可以获取返回给前端的数据# res = Response(serializer.data, status=status.HTTP_200_OK)return Response(serializer.data, status=status.HTTP_200_OK)
  • 第一个参数为Python中的常用数据类(字典或者嵌套字典的列表),serializer.data
  • status参数用于传递响应状态码
    • status.HTTP_200_OK等同于200,使用status的属性是的返回状态码更加易读
  • Response对象.data属性,可以获取返回给前端的数据

三、过滤

修改view.py文件实现过滤

class ProjectViews(APIView):def get(self, request: Request):qs = Projects.objects.all()# 获取过滤的参数name = request.query_params.get('name')# 判断是否需要过滤if name:# 过滤出name为前端传来的name的数据qs = qs.filter(name__exact=request.query_params.get('name'))serializer = serializers.ProjectModelSerializer(instance=queryset, many=True)return Response(serializer.data, status=status.HTTP_200_OK)

四、提取

我们的代码中重复用到Projects.objects.all()的查询集和serializers.ProjectModelSerializer序列化器类,我们可以把他们抽取出来,便于管理。

class ProjectViews(APIView):queryset = Projects.objects.all()serializer_class = serializers.ProjectModelSerializerdef get(self, request: Request):...

总结

这里的过滤功能感觉不是很好用,我们可以试试GenericAPIView视图。

Django-APIView相关推荐

  1. Django APIView源码解析

    APIView使用:luffy项目中关于APIView的使用 在Django之 CBV和FBV中,我们是分析的from django.views import View下的执行流程,以下是代码 fro ...

  2. django—APIView详细讲解

    一.APIView 1.继承APIView父类(Django中View的子类) a.具备View的所有特性 b.提供了认证.授权.限流等功能 c.一旦继承了APIView之后,request是DRF中 ...

  3. Django Rest_framework 4(APIView、GenericAPIView、ViewSet)

    详解Django DRF框架中APIView.GenericAPIView.ViewSet区别 https://zhuanlan.zhihu.com/p/72527077 View->APIVi ...

  4. Django Rest框架 APIView源码调用

    上一篇说了请求访问的流程,这一篇说一下请求对应的源码调用 as_view 定义view dispatch dispatch initialize_request get_parsers         ...

  5. as 不显示gradle视图_Python构建RESTful网络服务[Django篇:基于类视图的API]

    系列文章介绍 本系列文章将详细介绍将Django官方引导教程中的投票项目改写为RESTful网络服务.Django官方教程地址https://docs.djangoproject.com/zh-han ...

  6. DRF (Django REST framework) 中的视图类

    视图说明 1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父 ...

  7. 03 Django REST Framework 视图和路由

    01-DRF中的request 在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等. 比如,区别 ...

  8. Django REST framework 分页

    三种分页:根据页码.根据索引.根据加密 http://www.xx.com/courses/?page=1&size=10 http://www.xx.com/courses/?offset= ...

  9. Django REST framework API 指南(2):响应

    Django REST framework API 指南(1):请求 Django REST framework API 指南(2):响应 Django REST framework API 指南(3 ...

  10. Django REST framework的一些奇巧淫技(干货!!!)

    开始之前,假设你已经有Django和Django REST framework的一些基础了 mixins,ViewSet和routers配合使用 minxis的类有5种 CreateModelMixi ...

最新文章

  1. tidb mysql 协议_TiDB源码阅读(二) TiDB中的MySQL协议
  2. java中volatile
  3. 机械工业出版社之道格·赫尔曼《Python 3标准库》目录
  4. poj1222开关问题
  5. Apache Sentry手动安装、使用手册
  6. nginx php实例,多个mysql,nginx,php实例环境安装zabbix(完全自定义)
  7. python 投资组合_成功投资组合的提示
  8. 技嘉主板开机代码15_技嘉TRX40 AORUS MASTER开箱评测:16+3相直出供电太可怕
  9. 美颜重磅技术之GPUImage源码分析
  10. java防止SQL注入
  11. 时间序列--平稳性介绍及检验方法
  12. 如何选择一款合适的福禄克数字万用表?FLUKE
  13. “你是个成熟的设备了,要学会保护自己”
  14. 网卡调优RSS、RPS、RFS和XPS
  15. 做个程序员到底好不好
  16. 期货量化策略的分类与概述(完整录播版)
  17. pytorch安装GPU版本 (Cuda12.1)教程
  18. 最近Flash页面无法访问的问题解决方法
  19. 为了让孩子入门编程,Scratch的设计者操碎了心!谈谈Scratch编程环境和语言中的设计理念
  20. (C++)计算三角形面积

热门文章

  1. ARANGODB INSTALL
  2. 身份证批量识别 免费 身份证OCR识别 如何用python实现身份证识别
  3. 入职体检乙肝究竟有什么作用?
  4. Photoshop切图简单设置+工具介绍+以及切图方法
  5. easyuefi如何添加引导_easyuefi怎么用?easyuefi基本使用方法介绍
  6. linux igmp 属于那层协议,igmp协议属于哪一层
  7. 初学电子快速入门的方法
  8. C语言__bitwise宏定义
  9. python库下载超时_Python的请求库超时,但是得到了响应
  10. pl.droidsonroids.gif.GifImageView 动态加载gif图片不动的问题