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. ASE19团队项目 beta阶段 model组 scrum3 记录

    本次会议于12月4日,19时30分在微软北京西二号楼sky garden召开,持续20分钟. 与会人员:Jiyan He, Lei Chai, Linfeng Qi, Xueqing Wu, Yuto ...

  2. EF数据Linq方式查询

    using (var ctx = new NorthwindEntities()) { //单表查询SQL查询方式 //SELECT * FROM Customers AS c WHERE c.Cit ...

  3. java入门学习总结_03

    1.键盘录入 2.分支结构 键盘录入 概述 1.键盘录入:在程序运行的过程中,可以让用户录入一些数据,存储在内存的变量中,在后续的程序运行过程中,可以使用这些数据. 2.步骤: 第一步:导包,在类声明 ...

  4. MySQL中SQL语句常见优化策略

    1.避免全表扫描 对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引. 2.避免判断null 值 应尽量避免在where 子句中对字段进行null 值判 ...

  5. java实战(一)-------jdk环境在windows安装及配置

    1.jdk官方下载 http://www.oracle.com/technetwork/java/javase/downloads/index.html 点击下载windows的版本:jdk-13.0 ...

  6. 用js刷剑指offer(二叉树的镜像)

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  7. 各位大佬Python的第一部分道基础题已经整理好了,希望大家面试的时候能用的上。

    Python的第一部分道基础题,希望大家面试的时候能用的上. 1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途 ...

  8. 前端笔记-css

    css(穿着) 1. 第一种<head><style></style></head>中可以写css样式 css选择器 定位到哪个标签的css id选择器 ...

  9. redis 订阅&发布(转载)

    https://segmentfault.com/a/1190000016898228?utm_source=coffeephp.com 方法一: redis_helper.py: 封装发布订阅方法 ...

  10. Java8-Lambda-No.02

    public class Lambda2 { @FunctionalInterface public static interface Converter<F, T> { T conver ...