【零】DRF在Django项目中的使用
【1】导入
```shell
# DRF需要使用pip install 安装
pip install djangorestframework
```
-
DRF(Django Rest Framework)是一个用于构建 Web API 的工具包,它是基于 Django 框架的一个第三方应用(app)
-
在 Django 项目中,一个应用(app)通常是一个具有特定功能的模块,它包含了模型、视图、模板等组件,用于实现特定的功能或业务逻辑。
【2】使用
-
使用drf时,需要先在
settings.py
文件中进行注册app
```python
# 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__
获取属性,好像没有什么必要,肯定是会报错的,为什么要多做一个异常捕获,然后再抛出一个异常呀
标签:APIView,request,Django,2.1,View,DRF From: https://www.cnblogs.com/Lea4ning/p/18151616