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

相关推荐
comli_cn24 分钟前
使用清华源安装python包
开发语言·python
赵谨言34 分钟前
基于python 微信小程序的医院就诊小程序
经验分享·python·毕业设计
1.01^10001 小时前
[1111].集成开发工具Pycharm安装与使用
python·pycharm
HEX9CF1 小时前
【Django】测试带有 CSRF 验证的 POST 表单 API 报错:Forbidden (CSRF cookie not set.)
python·django·csrf
凡人的AI工具箱2 小时前
每天40分玩转Django:实操多语言博客
人工智能·后端·python·django·sqlite
Py办公羊大侠2 小时前
Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!
python·excel·打印·openpyxl·自动换行·显示不全
PieroPc2 小时前
Python tkinter写的《电脑装配单》和 Html版 可打印 可导出 excel 文件
python·html·电脑
Cachel wood2 小时前
Django REST framework (DRF)中的api_view和APIView权限控制
javascript·vue.js·后端·python·ui·django·前端框架
暮色尽染2 小时前
Python 正则表达式
开发语言·python
幽络源小助理2 小时前
Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明)
python·html·python爬虫·爬虫教程·requests_html·爬取书籍·掌阅