DjangoRestFramework概括

一 drf入门规范

前后端开发模式:混合、分离

API接口:地址、请求方法、请求参数、返回值

测试软件的使用:postman、Apifox等

序列化和反序列化

restful规范:比如http响应状态码

在Django中写符合规范的接口

djangorestframework:django的app

快速使用

二 CBV源码分析

CBV源码分析

路由中,视图类.as_view() ----> django的View的as_view() ---->执行结果view内存地址---->请求来了,路由匹配成功---->view(request) ---->return self.dispatch() ----> View的dispatch ---->通过反射,不同的请求会执行视图类中跟请求同名的方法

APIview源码分析

APIView继承了View

视图类: class BookView(APIView):

路由中 ,视图类.as_view() ---->drf的APIView的as_view() ---->调用父类的as_view,去除csrf ---->

View类的as_view内部的view闭包函数(加了个装饰器) ---->view(request) ---->return self.dispatch() ---->APIView的dispatch()

三 Request类的对象

request.data

request.query_params

request.Files

request.method,request.path等

重写了魔术方法()

四 序列化组件(drf核心)

能做的事:序列化、反序列化校验、序列化

Serializer ---->book表先做序列化

定义序列化类

class BookSerializer (Serializer):

name=serializer.CharField()

使用序列化类

ser=BookSerializer(instance=qs,单个对象,many=True)

ser.data #字典

字段类:很多,如ListField、DictField

字段参数:反序列化校验,字段自己的规则

read_only write_only

反序列化校验:1.字段自己 2.局部钩子:validate_字段名 3.全局钩子validate

反序列化保存:校验过后,ser.save() ---->判断instance是否存在,如果不存在,就是调用ser的create方法。在序列化类中,重写create

反序列化更新:校验过后,ser.save() ---->判断instance是否存在,如果不存在,就是调用ser的update方法。在序列化类中,重写update

ModelSerializer的使用:不需要写一个个字段,跟表模型有对应关系

extra_kwargs

其他跟Serializer一模一样

序列化,定制返回格式

source

SerializerMethodField:写在序列化类中,配合一个 get_字段名的方法,返回什么,前端就看到什么

在表模型中写:写方法,返回字典、列表、字符串 ---->在序列化类中可以使用ListField、DictField

五 请求与响应

Request类的对象

接收前端传入的编码格式:json,urlencoded,form-data

局部配置 全局配置

Request的源码

Response类的对象

前端看到的形式(浏览器,json)

源码分析:data headers status_code

六 视图组件

两个视图基类:APIView,GenericAPIView

五个视图扩展类,必须配合GenericAPIView。基于它再封装成自己的5个视图扩展类,返回格式符合公司规范

九个视图子类:5个视图扩展类+GenericAPIView

视图集:ViewSetMixin:只要继承它,路由写法就变了

ViewSet:ViewSetMixin,views.APIView

GenericViewSet:ViewSetMixin,generics.GenericAPIView

ModelViewSet:

1.继承了ModelViewSet,没有增加一条记录,就干某个事,重写

perform_create

2.序列化使用一个序列化类,反序列化使用配置的那个序列化类

3.自定义了一个方法:login,使用了action装饰器,让它取到的qs对象和序列

化类跟配置的都不一样

ReadOnlyModelViewSet

视图类:self 内部有request对象,还有个action,就是视图类中方法的字符串名

七 认证、频率、组件

认证:写个类,继承BaseAuthentication,重写authenticate方法,在里面做认证,如果认证通过返回两个值,如果认证失败,就抛异常 ---->局部、全局配置

权限:同上

频率:写个类,继承SimpleRateThrottle,重写get_cache_key,返回什么,就以什么做限制(ip,用户id) ---->类属性:scop ---->配置文件配置,全局和局部

八 排序

使用内置的即可,查询所有接口,才有排序,必须继承GenericAPIView

在视图类中,配置filter_backends=[OrderingFilter],还需要配置属性:ordering_fields=[id,price]

如果是继承APIView写排序,自己写

九 过滤

内置:SearchFilter,模糊查询

第三方:django-filter

自己写的:写一个类,继承BaseFilterBackend,重写filter_queryset,返回qs对象,返回的就是过来后的

十 分页

三种分页方式:PageNumberPagination,LimitOffsetPagination,CursorPagination

每个里有些类属性控制:每页显示多少条,最多显示多少条,第几页等

写个类,继承三个之一,配置在视图类上(必须继承GenericAPIView)

继承APIView写分页

十一 异常处理

全局异常处理 ---->同一返回格式

写个函数:custom_exception_handler(exc,context) ----> 调用了原来的exception_handler (只能处理drf的异常) ----> 返回两种情况:None,Response的对象

配置在drf的配置文件

相关推荐
Python大数据分析@19 分钟前
Origin、MATLAB、Python 用于科研作图,哪个最好?
开发语言·python·matlab
编程零零七1 小时前
Python巩固训练——第一天练习题
开发语言·python·python基础·python学习·python练习题
Zonda要好好学习1 小时前
Python入门Day4
java·网络·python
小龙在山东2 小时前
Python 包管理工具 uv
windows·python·uv
weixin_307779132 小时前
批量OCR的GitHub项目
python·github·ocr
孤狼warrior3 小时前
灰色预测模型
人工智能·python·算法·数学建模
神仙别闹3 小时前
基于Python实现LSTM对股票走势的预测
开发语言·python·lstm
机器学习之心4 小时前
小波增强型KAN网络 + SHAP可解释性分析(Pytorch实现)
人工智能·pytorch·python·kan网络
JavaEdge在掘金4 小时前
MySQL 8.0 的隐藏索引:索引管理的利器,还是性能陷阱?
python
站大爷IP4 小时前
Python办公自动化实战:手把手教你打造智能邮件发送工具
python