drf源码继承管理

# drf继承关系

View
APIView
as_view:
执行父类的as_view
调用dispatch
dispatch
init_request
request.queryparams
request.Data
init
内容协商/版本
认证/授权/限流 GenericAPIView
get_queryset
get_serializerclass
过滤/分页 viewset
重写as_view方法

drf系列参考

# drf和orm耦合度太高? 可以继承viewsets.ViewSet类.逃脱了gennericapiview
class ViewSet(ViewSetMixin, views.APIView):pass class GetTaskIpLogViewSet(viewsets.ViewSet): def list(self, request, *args, **kwargs):
data = get_task_ip_log("cat /etc/hosts")
return Response(data)

序列化器

api参考

//序列化api: 后端 -> 浏览器

serializer = CommentSerializer(comment) # 对象/queryset -> dict
serializer.data
# {'email': 'leila@example.com', 'content': 'foo bar', 'created': '2016-01-27T15:17:10.375877'} from rest_framework.renderers import JSONRenderer json = JSONRenderer().render(serializer.data) # 多个对象many=true
json
# b'{"email":"leila@example.com","content":"foo bar","created":"2016-01-27T15:17:10.375877"}'
//反序列化api: 浏览器 -> 后端

# 准备字节流
from django.utils.six import BytesIO
from rest_framework.parsers import JSONParser stream = BytesIO(json)
data = JSONParser().parse(stream) serializer = CommentSerializer(data=data) # 多个对象many=true
serializer.is_valid()
# True
serializer.validated_data
serializer.errors
// 校验post参数的合法性
# 还可以自定义复杂的验证器 1.基于字段 2.基于对象 3.全局定义验证器 class CommentSerializer(serializers.Serializer):
email = serializers.EmailField()
content = serializers.CharField(max_length=200)
created = serializers.DateTimeField() from rest_framework import viewsets class UserViewset(viewsets.ViewSet):
def list(self, request, *args, **kwargs): return Response("hello") def create(self, request, *args, **kwargs): serializer = CommentSerializer(data=request.data, many=True)
if serializer.is_valid(raise_exception=True): # 抛出404.默认不写是200
return Response(serializer.validated_data)
else:
return Response(serializer.errors)

序列化通用参数

[drf]源码和序列化梳理的更多相关文章

  1. 02 drf源码剖析之快速了解drf

    02 drf源码剖析之快速了解drf 目录 02 drf源码剖析之快速了解drf 1. 什么是drf 2. 安装 3. 使用 3. DRF的应用场景 1. 什么是drf drf是一个基于django开 ...

  2. Django与drf 源码视图解析

    0902自我总结 Django 与drf 源码视图解析 一.原生Django CBV 源码分析:View """ 1)as_view()是入口,得到view函数地址 2) ...

  3. drf源码save以及response

    drf源码save以及response 一.save 其中蛮重要的一段 if self.instance is not None: self.instance = self.update(self.i ...

  4. DRF源码系列分析

    DRF源码系列分析 DRF源码系列分析--版本 DRF源码系列分析--认证 DRF源码系列分析--权限 DRF源码系列分析--节流

  5. Django之DRF源码分析(二)---数据校验部分

    Django之DRF源码分析(二)---数据校验部分 is_valid() 源码 def is_valid(self, raise_exception=False): assert not hasat ...

  6. drf源码剖析系列(系列目录)

    drf源码剖析系列(系列目录) 01 drf源码剖析之restful规范 02 drf源码剖析之快速了解drf 03 drf源码剖析之视图 04 drf源码剖析之版本 05 drf源码剖析之认证 06 ...

  7. 07 drf源码剖析之节流

    07 drf源码剖析之节流 目录 07 drf源码剖析之节流 1. 节流简述 2. 节流使用 3. 源码剖析 总结: 1. 节流简述 节流类似于权限,它确定是否应授权请求.节流指示临时状态,并用于控制 ...

  8. 06 drf源码剖析之权限

    06 drf源码剖析之权限 目录 06 drf源码剖析之权限 1. 权限简述 2. 权限使用 3.源码剖析 4. 总结 1. 权限简述 权限与身份验证和限制一起,决定了是否应授予请求访问权限. 权限检 ...

  9. 05 drf源码剖析之认证

    05 drf源码剖析之认证 目录 05 drf源码剖析之认证 1. 认证简述 2. 认证的使用 3. 源码剖析 4. 总结 1. 认证简述 当我们通过Web浏览器与API进行交互时,我们可以登录,然后 ...

随机推荐

  1. 【Day5】3.反爬策略之模拟登录

    import urllib.request as ur import user_agent import lxml.etree as le request = ur.Request( url='htt ...

  2. python之列表、元组

    Day 2-Morning 创建列表 创建列表和创建普通变量一样,用中括号括起一堆数据即可(这里的数据可以是整型.字符串.浮点型...甚至可以包含另一个列表),数据间用逗号隔开. eg:number= ...

  3. Nginx系列1.1:ubuntu16.04编译nginx-rtmp流媒体服务器

    1.下载nginx和nginx-rtmp-module nginx官网:nginx.org tar.gz文件 解压缩命令: wget https://nginx.org/download/nginx- ...

  4. Qt 4.8.5 + MinGW32 + Qt creater 安装

    Qt 4.8.5 + MinGW32 + Qt creater 安装 下载文件 文件版本 Qt 4.8.5 MinGW 0.4.4 Qt Creator 2.8或2.8.1 gdb-7.4-MinGW ...

  5. 关于阿里云OSS上传图片之后会被旋转90度的解决办法

    原文:https://www.cnblogs.com/wuhjbk/p/10133596.html 问题描述:正常的图片前端上传到oss成功之后的资源地址.在html上引用的时候被旋转了90度oss资 ...

  6. 用js刷剑指offer(二维数组中的查找)

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  7. Java字节码方法表结构深度剖析

    继续上一次[https://www.cnblogs.com/webor2006/p/9459681.html]的字节码分析,这次来分析一下最为复杂的方法表的信息,如下: 而上一次分析到了属性表的位置在 ...

  8. JavaScript005,语法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. ZooKeeper介绍(转载)

    关于ZooKeeper,下面引用了一片文章,原文地址是:http://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍ZooKeeper之 ...

  10. Java8-ConcurrentHashMap

    import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ForkJoinPool; public clas ...