DRF之View和APIView
【零】DRF在Django项目中的使用
【1】导入
# DRF需要使用pip install 安装
pip install djangorestframework
- DRF(Django Rest Framework)是一个用于构建 Web API 的工具包,它是基于 Django 框架的一个第三方应用(app)
- 在 Django 项目中,一个应用(app)通常是一个具有特定功能的模块,它包含了模型、视图、模板等组件,用于实现特定的功能或业务逻辑。
【2】使用
- 使用drf时,需要先在
settings.py
文件中进行注册app
# settings.py
INSTALLED_APPS = [
...
'rest_framework'
]
【一】View
- restful规范所需5个接口
- 查询所有
- 添加
- 查询单条数据
- 更新单条
- 删除单条
【1】基于Django的View实现5个接口
- 预处理请求数据的装饰器代码
- 【注】该版本如果使用post请求,需要注释掉csrf中间件
【2】基于DRF.APIView + Response实现5个接口
-
使用Django自带的View我们可以发现,其对请求数据的处理不够完善
-
而在DRF中,其帮我们处理了请求数据,能够让我们可以通过【request.data】直接获取到三种编码格式处理后的数据
-
【request.data】中的数据可能为【querydict】或【dict】对象
-
代码预览
【2.1】APIView源码分析
- 视图类调用时,就是执行【as_view()】方法
- 【as_view()】就是我们查看APIView源码的入口
【2.1.1】DRF的APIView的as_view()
【2.1.2】Django的View的as_view()
【2.1.3】DRF的APIView的dispatch()
【2.1.3.1】包装新的request
- Request类实例化对象的
__init__
方法
【2.1.4】APIView的request对象
- APIView的request对象相较于django的request对象多了一些属性
- 常用的(以下的reuqest均为APIView的request对象)
request.data
:获取请求体中的数据,以QueryDict形式或Dict形式返回request.query_params
:与django的request对象中的.GET
方法一致
- 当获取APIView的request对象中没有的属性时,将会触发
__getattr__
方法
【2.1.5】源码存疑的地方
- 如果再调用
self.__getattribute__
获取属性,好像没有什么必要,肯定是会报错的,为什么要多做一个异常捕获,然后再抛出一个异常呀