Django-APIView
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相关推荐
- Django APIView源码解析
APIView使用:luffy项目中关于APIView的使用 在Django之 CBV和FBV中,我们是分析的from django.views import View下的执行流程,以下是代码 fro ...
- django—APIView详细讲解
一.APIView 1.继承APIView父类(Django中View的子类) a.具备View的所有特性 b.提供了认证.授权.限流等功能 c.一旦继承了APIView之后,request是DRF中 ...
- Django Rest_framework 4(APIView、GenericAPIView、ViewSet)
详解Django DRF框架中APIView.GenericAPIView.ViewSet区别 https://zhuanlan.zhihu.com/p/72527077 View->APIVi ...
- Django Rest框架 APIView源码调用
上一篇说了请求访问的流程,这一篇说一下请求对应的源码调用 as_view 定义view dispatch dispatch initialize_request get_parsers ...
- as 不显示gradle视图_Python构建RESTful网络服务[Django篇:基于类视图的API]
系列文章介绍 本系列文章将详细介绍将Django官方引导教程中的投票项目改写为RESTful网络服务.Django官方教程地址https://docs.djangoproject.com/zh-han ...
- DRF (Django REST framework) 中的视图类
视图说明 1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父 ...
- 03 Django REST Framework 视图和路由
01-DRF中的request 在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等. 比如,区别 ...
- Django REST framework 分页
三种分页:根据页码.根据索引.根据加密 http://www.xx.com/courses/?page=1&size=10 http://www.xx.com/courses/?offset= ...
- Django REST framework API 指南(2):响应
Django REST framework API 指南(1):请求 Django REST framework API 指南(2):响应 Django REST framework API 指南(3 ...
- Django REST framework的一些奇巧淫技(干货!!!)
开始之前,假设你已经有Django和Django REST framework的一些基础了 mixins,ViewSet和routers配合使用 minxis的类有5种 CreateModelMixi ...
最新文章
- tidb mysql 协议_TiDB源码阅读(二) TiDB中的MySQL协议
- java中volatile
- 机械工业出版社之道格·赫尔曼《Python 3标准库》目录
- poj1222开关问题
- Apache Sentry手动安装、使用手册
- nginx php实例,多个mysql,nginx,php实例环境安装zabbix(完全自定义)
- python 投资组合_成功投资组合的提示
- 技嘉主板开机代码15_技嘉TRX40 AORUS MASTER开箱评测:16+3相直出供电太可怕
- 美颜重磅技术之GPUImage源码分析
- java防止SQL注入
- 时间序列--平稳性介绍及检验方法
- 如何选择一款合适的福禄克数字万用表?FLUKE
- “你是个成熟的设备了,要学会保护自己”
- 网卡调优RSS、RPS、RFS和XPS
- 做个程序员到底好不好
- 期货量化策略的分类与概述(完整录播版)
- pytorch安装GPU版本 (Cuda12.1)教程
- 最近Flash页面无法访问的问题解决方法
- 为了让孩子入门编程,Scratch的设计者操碎了心!谈谈Scratch编程环境和语言中的设计理念
- (C++)计算三角形面积
热门文章
- ARANGODB INSTALL
- 身份证批量识别 免费 身份证OCR识别 如何用python实现身份证识别
- 入职体检乙肝究竟有什么作用?
- Photoshop切图简单设置+工具介绍+以及切图方法
- easyuefi如何添加引导_easyuefi怎么用?easyuefi基本使用方法介绍
- linux igmp 属于那层协议,igmp协议属于哪一层
- 初学电子快速入门的方法
- C语言__bitwise宏定义
- python库下载超时_Python的请求库超时,但是得到了响应
- pl.droidsonroids.gif.GifImageView 动态加载gif图片不动的问题