DjangoRestFramework概括

2023-12-29 22:04

本文主要是介绍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的配置文件

这篇关于DjangoRestFramework概括的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550859

相关文章

读Spring实战(第四版)概括—装配Bean

很久很久以前读过Spring实战(第三版),因为第三版和第四部差异还是特别明显的,在整体思想上有了比较重大的改变,比如用注解和JavaConfig替换Xml以及现在非常火热的Springboot在书的最后也有提到。OK,开始看书,书本的第一章讲了一下Spring存在的目的(简化Java开发)和Spring的功能,以及Spring3->Spring4增加了哪些功能,那我就从第二章开始概括本书,以给我

C++常见知识点概括

大学C++知识点概括 C++ 是一种广泛应用的面向对象编程语言,其兼具高效的性能和灵活的编程风格。大学阶段的 C++ 课程通常涵盖了从基础语法到高级概念的多个知识点。以下是一个全面的知识点概述: 1. 基础语法 变量和数据类型:C++ 提供了多种基本数据类型,如 int、float、double、char 和 bool。还支持用户自定义类型,如 struct 和 class。输入输出:使用

【Python入门思维概括图】

📖入门思维概括图 ✅第1节 基础语法 ✅第2节 判断语句 ✅第3节 循环语句 ✅第4节 函数 ✅第5节 数据容器 ✅第6节 函数进阶 ✅第7节 文件操作 ✅第8节 异常模块和包 拓展:学了python能干什么,可以参考下面的Python使用场景思维导图介绍

【UML】之简单概括

29号开始看UML的视频,由于之前看视频总是一拖拖上半个月,所以这次打算速战速决,而且UML视频的讲解和内容并不算多,也比较容易懂,到后期更是花了很多时间来举例子巩固各种图的画法,所以这次花了11天初步看完了视频,由于自己的总结还没到位,所以先对UML来一个大体的概括。 首先,要明确,UML不是形式化语言(没有特定的格式),不是程序设计语言(不能用来编写可执行程序),而是“

Djangorestframework+Vue搭建前后端分离项目

文章目录 1、Django环境搭建2、安装Vue3、安装ant-design插件4、echarts图标插件5、解决跨域问题 1、Django环境搭建 安装anaconda https://www.anaconda.com/download 打开命令行工具,出现base就表示安装成功了,表示当前的虚拟环境名 创建虚拟环境的python3.8版本的虚拟环境 conda

高考专业与学校选择之道。这个标题简洁明了,概括了文章的主要内容,同时突出了文章的主题。

随着24年高考帷幕的落下,许多考生正在面临一场新的思考与选择。对于我来说,高考不仅仅是关于分数,更是关于未来的方向和选择。专业和学校,这两个前置选项犹如“鱼与熊掌”,有时难以兼得。然而,在我看来,选择专业和学校都是开启大学新生活的重要步骤,需要慎重考虑。  首先,对于我来说,专业选择的重要性不言而喻。它不仅直接影响着未来的职业发展,更关乎个人的兴趣和热情。我坚信,只有热爱,才能让我在专业领域中

技能概括

1java中常见的io流 1.1字节流1.2字符流1.3字节流如何转换为字符流?1.4字符流和字节流的区别?2说说你对反射的理解反射3说说你对泛型的理解4android的四大组件5熟悉ListView recycleView基本优化6多线程以及AyscTask内部机制7 熟悉使用JNI 8简述事件分发机制9 熟练掌握(数据)图片缓存机制以及Imageloader ,Glide,Picasso,F

一文概括:内容可寻址寄存器(CAR)

一、概述         内容可寻址寄存器(Content-Addressable Register,CAR)是一种能够根据内容(数据)而非传统的存储地址来进行数据访问的特殊存储单元。与地址可寻址寄存器不同,内容可寻址寄存器可以通过指定的数据值来查找存储的位置,使其在需要高效数据检索的应用中尤其有用。 二、工作原理         内容可寻址寄存器的操作基于数据内容匹配而非地址访问。其工作过

【C++】【期末考】【基本概念和语法】概括总结——期末速成

目录 1. C++简介 C++的历史与发展 C++的特点与优势 2. 基本语法 注释 数据类型与变量 常量 运算符 输入与输出 3. 控制结构 条件语句 循环语句 4. 函数 函数定义与声明 参数传递 返回值 函数重载 5. 数组与字符串 一维数组 多维数组 字符串处理 6. 指针 指针的定义与使用 指针运算 指针与数组 函数指针 7. 引