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)

序列化通用参数

最新文章

  1. 页面制作部分之PS切图
  2. wait、notify、sleep、interrupt对比分析
  3. 一起来做chrome扩展《AJAX请求》
  4. c++ 对象的内存布局
  5. IE6、7绝对定位层被遮挡的原因(主要是父层决定的)
  6. Mysql 导入数据,推荐Source命令,太快了
  7. HDU5934 Bomb(2016杭州CCPC第二题)(强连通缩点)
  8. BNUOJ 1006 Primary Arithmetic
  9. (KEIL)MDK5安装与JLINK问题解决方法(支持代码自动补全)
  10. head first c<11>初探网络编程上
  11. 运行PHP
  12. Centos 7.3 安装mysql5.7.19 各种调试就不多说了
  13. 树莓派.使用Node.js控制GPIO
  14. 在java程序中实现发送邮件的功能
  15. Mockito框架入门教程(二)
  16. asp.netajax与jquery和bootstrap的无刷新完美实现
  17. X86给龙芯笔记本编译本地工具链(未完待续)
  18. List 的add()与addAll()的区别
  19. Lazarus分体式改成一体式窗口
  20. FreeMarker快速入门

热门文章

  1. 4.解析配置文件 redis.conf
  2. 【Hibernate】Hibernate关联关系的映射
  3. Django应用之content type(app应用之一django.contrib.contenttypes)
  4. Image Processing and Analysis_8_Edge Detection:Statistical edge detection_ learning and evaluating edge cues——2003
  5. 网络流dinic ek模板 poj1273
  6. linux命令详解——eval
  7. watch 监控的新旧值一致问题处理
  8. c#调用
  9. BZOJ 2229 / Luogu P3329 [ZJOI2011]最小割 (分治最小割板题)
  10. shiro框架的UsernamePasswordToken与对应Realm中的AuthenticationToken的一点比较(转)