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的配置文件

相关推荐
仙人掌_lz3 分钟前
AI与机器学习ML:利用Python 从零实现神经网络
人工智能·python·机器学习
逸雪飞扬31 分钟前
Gradio 非侵入式修改的离线使用方案
python·html
来自外太空的鱼-张小张1 小时前
java将pdf文件转换为图片工具类
java·python·pdf
endNone1 小时前
【机器学习】SAE(Sparse Autoencoders)稀疏自编码器
人工智能·python·深度学习·sae·autoencoder·稀疏自编码器
明月与玄武1 小时前
快速掌握Django框架设计思想(图解版)
后端·python·django
陪我一起学编程1 小时前
关于ORM增删改查的总结——跨表
数据库·后端·python·django·restful
旷野说1 小时前
cpp 绑定方案大比拼
python
Q_Q5110082851 小时前
python+django/flask成都奥科厨具厂产品在线销售系统
vue.js·spring boot·python·django·flask·node.js·php
MilesShi1 小时前
AI Agent实战 - LangChain+Playwright构建火车票查询Agent
人工智能·python·机器学习
代码程序猿RIP2 小时前
【Pytorch】(1)Pytorch环境安装-①创建虚拟环境
人工智能·pytorch·python