DRF框架笔记
序列化器类的定义格式?
继承serializers.Serializer;字段 = serializers.字段类型(选项参数)
序列化器类的基本使用?
序列化器类(instance=None, data=empty, **kwarg);序列化时传给instance参数;反序列化时传给data参数。
序列化器类字段常用参数和选项参数?
选项参数read_only,write_only,required。。。常用参数max_length,min_value。。。
序列化单个对象和多个对象?
将obj传递给instance;添加参数many=True。
关联对象的嵌套序列化?
1.PrimaryKeyRelatedField,将关联对象序列化为关联对象的主键,仅用于序列化需指定read_only=True,指定queryset参数时将被用作反序列化时参数校验。
2.使用关联对象的序列化器,如在英雄序列化器类里定义hbook = BookInfoSerializer()。
3.StringRelatedField,将关联对象序列化为关联对象模型类__str__方法的返回值。用法同1但没参数。
反序列化-基本校验和补充验证?
基本校验:serializer.is_valid(),validated_data,errors。
补充验证:1.字段添加validators选项参数,如validators=[函数],然后定义该函数进行校验。2.定义特定方法validate_字段名,针对特定字段验证。3.定义validate方法针对多个字段的内容进行补充验证。这个多好!!
反序列化-数据保存(新增和更新)
创建序列化器对象的时候看有没有传递instance实例,有则save()方法调用update(),无则create()。
关于ModelSerializer?
继承ModelSerializer;fields指定需序列化字段,可为__all__;自动生成序列化器类的字段;默认实现create()和update()。
视图类?
2基5拓9子。
APIView视图基类的特点和基本使用?
传入的为Request类的对象;响应为Response类的对象且会根据客户端请求头Accpet自动转换格式;自带异常处理机制;其他功能:认证、权限、限流。
Request类的request属性有data,query_params。分别相当于body、POST、FILES等请求体数据和GET查询字符串。
响应像强转,如Response(serializer.data)。
GenericAPIView视图基类的特点和基本使用?
主要增加了操作序列化器和数据库查询的属性和方法。
操作序列化器:
serializer_class指明视图使用的序列化器。
get_serializer_class(self)返回序列化器类。
get_serializer(self, args, **kwargs)返回创建序列化器类的对象。
数据库查询:
queryset指明视图使用的查询集。
get_queryset(self)返回视图使用的查询集。
get_object(self)返回从视图使用的查询集中查询指定的对象。
Mixin扩展类?
List(Create,Retrieve,Update,Destroy)ModelMixin;自动过滤和分页。
子类视图类?
继承自GenericAPIView和对应的Mixin扩展类;在那5个基础上多这4个ListCreate(RetrieveUpdate,RetrieveDestroy,RetrieveUpdateDestroy)APIView。
视图集?
将操作同一组资源相关的处理方法放在同一个类中,这个类叫做视图集。如:
前面在实现图书管理的5个API时,需要两个类视图,而如果视图集,只需要一个即可。
视图集使用?
继承视图集父类ViewSet。
方法命名以对应的action命名,如def retrieve(self, request, pk):。
url需指明对应关系。如大括号里写上'get': 'retrieve'。
视图集父类的使用?
GenericViewSet:在视图继承里配合Mixin扩展类提供对应请求处理方法
ModelViewSet:其本身继承自GenericViewSet和5个Mixin扩展类
ReadOnlyModelViewSet:继承自GenericViewSet和2个Mixin扩展类
视图集中添加额外的处理方法?
latest方法获取最新数据
read方法修改指定图书的阅读量(只修改阅读量)
视图集对象action属性的作用?
视图集对象.action获取所有执行action的操作.
路由Router的作用和基本使用?
from rest_framework.routers import SimpleRouter, DefaultRouter
router = SimpleRouter() 或 DefaultRouter()
router.register(prefix, viewset, base_name)
urlpatterns = []
urlpatterns += router.urls
视图集中设置lookup_value_regex,以从url中提取pk参数对应的正则表达式。
视图集中额外处理方法的配置项,即latest和read,需要添加action装饰器。action装饰器可以接收两个参数:methods:表明该处理方法对应的请求方式,列表传递。detail:表明生成url配置项时,是否需要从路径中提取pk数据。True/False:生成url配置项时,需要/不需要从url地址中提取pk参数。(没什么用破事还多^_^)
其他功能?
认证:全局认证'DEFAULT_AUTHENTICATION_CLASSES':(rest_framework.authentication.SessionAuthentication);指定视图认证authentication_classes=[SessionAuthentication]
权限:全局和指定用法同上。四种权限AllowAny, IsAuthenticated, IsAdminUser, IsAuthenticationOrReadOnly。
自定义权限:继承BasePermission,方法has_permission(self, request, view), has_object_permission(self, request, view, obj)
限流:分为限流类和频次。限流类AnonRateThrottle,UserRateThrottle和ScopedRateThrottle。频次属性有user,anon,若有指定视图限流则用指定的名字。
指定视图限流:指定限流类为第三个,指定throttle_scope='',限流选项里用自己写的属性名。
过滤:安装django-filter,注册DjangoFilterBackend,指定过滤字段filter_fields。
排序:在视图中指定排序后端filter_backends=[OrderingFilter], 指定排序字段ordering_fields。浏览器url后面加上?ordering=排序的字段就可以访问了,如/?ordering=read。
分页:配置文件中指定全局分页类DEFAULT_PAGINATION_CLASS和页容量PAGE_SIZE。全局分页类PageNumberPagination, LimitOffsetPagenation。某视图关闭分页pagination_class=none。
自定义分页:pagination_class=自定义的类名,自定义的类里指定3个参数page_size,page_size_query_param, max_page_size。浏览器可以使用page和page_size访问。
异常处理:默认异常处理exception_handler可处理APIException及DRF里的很多异常,返回给客户端对应的响应,区别django处理的是黄的一堆英文。
自定义异常(相当于拓展了异常范围),如添加了DatabaseError。
DRF框架笔记的更多相关文章
- MyBatis 框架笔记
Mybatis 框架笔记 ------技术源于热爱! 获取更多内容请关注小编的个人微信公众平台 1 Mybatis入门 1.1 单独使用jdbc编程问题总结 1.1.1 jd ...
- DRF框架之认证组件用法(第四天)
1. 什么是drf 框架的认证组件: auth 就等于是jango中的Auth模块,Auth是自带session信息,但是 drf的认证组件可以自定义token携带过去,去判断用的 2.如何实现认证呢 ...
- DRF框架之视图方法的几个封装好的模块介绍(第三天)
1.DRF框架给我们封装好了好多层模块的 来实现简便接口的编写 # from rest_framework.mixins import CreateModelMixin, UpdateModelMix ...
- 一、restful规范 二、CBV(View)源代码执行流程 三、drf框架安装和简单使用
一.restful规范 ''' 它是一个规范,面向资源架构 十条规范 1.API与用户的通讯协议,总是使用HTTPs协议,确保了网络传输的安全性 2.域名 --https://api.example. ...
- DRF框架之 serializers 序列化组件
1. 什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式 2. DRF框架自带序列化的工具: serializers 3. DRF框架 serializers ...
- DRF框架简介(第一天)
1.drf框架全称 djangorestframework 1.如何安装drf框架: pip3 install djangorestframework #drf框架其实就是一个app称之为drf #d ...
- 写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用
写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用 一.了解什么是DRF DRF: Django REST framework Django REST framew ...
- Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介
1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...
- django drf框架中的user验证以及JWT拓展的介绍
登录注册是几乎所有网站都需要去做的接口,而说到登录,自然也就涉及到验证以及用户登录状态保存,最近用DRF在做的一个关于网上商城的项目中,引入了一个拓展DRF JWT,专门用于做验证和用户状态保存.这个 ...
随机推荐
- 【网鼎杯2020朱雀组】Web WriteUp
nmap nmap语法,很简单. 127.0.0.1' -iL /flag -oN vege.txt ' phpweb 打开,抓包,发现可以传递函数和其参数 试了一下很多函数都被过滤了,不能执行系统命 ...
- 基于chaosblade的故障注入平台小试
当今社会互联网应用越来越广泛,用户量日益剧增.在人们对互联网服务的依赖性增大的同时,也对服务的可用性和体验感有了更高的要求.那么如何保障服务在运营过程中能一直给用户提供稳定的.不间断的.可靠可信的服务 ...
- Pinpoint 设置微信或者钉钉预警
本文基于 Pinpoint 2.1.0 版本 本文大部分内容来自:侠梦的开发笔记 ,但是原文的版本和我的不一致,放在2.1.0是跑不起来的,但是大概逻辑和思路基本一致. 目录 一.接入预警大概思路 二 ...
- 痞子衡嵌入式:在IAR开发环境下为工程开启CRC完整性校验功能的方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下为工程开启CRC完整性校验功能的方法. CRC校验在嵌入式领域里的应用非常广,比如在通信领域,CRC检验值可以作为数据 ...
- P4771 八百标兵奔北坡
观察题目中关于北边的定义,发现是以当前点为顶点,向上的倒三角(自己想想为什么). 然后就可以直接 DP 了,令 \(f_{i,j}\) 表示点 \(\left(i,j\right)\) 的答案. \[ ...
- vs2019 Com组件初探-通过IDispatch接口调用Com
vs2019 Com组件初探-简单的COM编写以及实现跨语言调用 上一篇实现了如何编写基于IDipatch接口的COM以及vbs如何调用编写的COM 本次主要是实现VBS的CreateObject函数 ...
- mininet + opendaylight环境配置
环境配置 ubuntu18.04 镜像 mininet2.2.2 apt-get install mininet 但这种安装只是TLS版本的mininet,与最新版本在功能上有所差距. 控制器(ope ...
- 什么,kafka能够从follower副本读数据了 —kafka新功能介绍
最近看了kafka2.4新版本的一些功能特性,不得不说,在kafka2.0以后,kafka自身就比较少推出一些新的feature了,基本都是一些修修补补的东西.倒是kafka connect和kafk ...
- fist-第三天冲刺随笔
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...
- moviepy音视频剪辑:追踪人脸打马赛克的三种实现方式
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在moviepy官网的案例<Tracking and blurring someone's face>和CSDN的moviepy大神uc ...