Rest_FrameWork 增删改查 源码 时序图
2022-01-05 18:34:02 0 举报
Python Django Rest_FrameWork 增删改查 源码 时序图
作者其他创作
大纲/内容
3.2 调用函数 传入第三步获取的queryset和过滤参数;get_object_or_404(queryset,**filter_kwargs)
5.1.4 返回校验后的数据,通过一下几种方式可以得到验证成功后的数据:serializer.validated_dataserializer.data
4.1.2 通过配置获取分页器
3.1.1 self.get_queryset()获取queryset类
ListModelMixin
TestInfoDetailViewSet
1 self.get
2.2 传入上一步获取的queryset包装分页参数后返回page对象 page= self.paginate_querysett(queryset)转到4
5.1.2.2.2 每个Field内部值校验,注意和5.1.2 的区别self.to_internal_value(data)
3.2.2 queryset = _get_queryset(klass)获取queryset的代理对象
Serializer
5.1 调用这里的self.get_serializer 方法
2.4 self.get_success_headers(serializer.data) 获得成功后的返回头
获取详情
4.2.1 self.get_serializer_context() 传递参数
Field
2.5 如果page 不为None ,调用下面的方法,包装需要返回的分页信息,并返回 self.get_paginated_response(serializer.data) 跳到6
3.1.1.1 queryset = self.queryset 返回数据集,如果queryset是QuerySet 则返回queryset.all()
2.1 包装过滤参数 queryset = self.filter_queryset(self.get_queryset())获取queryset对象转到3
2.4 如果page 为None Response(serializer.data) 序列化器中的data就是获取到的数据
TestInfoListViewSet
6.2 self.create(validated_data) 调用creat方法进行保存
GenericAPIView
2 self.create
4.1 调用这里的self.get_serializer 方法
BaseSerializer
4.1 instance.delete() 调用model的delete方法进行删除
5.1.2.1 直接调用Filed的run_validation 方法 校验每个字段 validated_value = field.run_validation(primitive_value): 调用每一个字段的校验规则进行校验注意是5.1的 self.run_validation()的区别
ModelSerializer
5.1.2.2.1 每个Field空值校验,注意和5.1.1的区别 self.validate_empty_values(data) 校验数据是否为空
RetrieveAPIView
Test2InfoSerializer
4.1self.paginator 先获取到分页器
CharField
5.1.2.2.3 自定义校验方式二: 遍历每一个Field的自定义校验器进行校验self.run_validators(value), validater(value))
3.1 self.filter_queryset(self.get_queryset())获取queryset类
2 self.receive
2.5 Response(serializer.data) 序列化器中的data就是获取到的数据
4.1.1 self.get_serializer_class()获取序列化器类,
5.1.2 self.get_serializer_context() 传递参数
6.3 ModelClass.objects.create(**validated_data)调用 模型的objects方法进行保存
2.2 self.perform_destroy(instance) 跳到4
4.1.2 self.serializer_class 获取自身定义的序列化器类
获取列表
RetrieveModelMixin
2.3 self.perform_create(serializer) 调用serializer的save 方法保存数据 跳到6
2.1 instanse=self.getObject()获取结果对象 到3
model.objects
3.3 包装过滤条件的queryset self.filter_queryset(self.get_queryset()) 并返回这个queyset
ListAPIView
6.1 调用分页器的 get_paginated_response 方法,包装返回的Page结果 如果不满意可以再分页器类中重写这个方法
5.1.3.1 传入字典 to_validate = self._read_only_defaults() 获取所有字段
6.1 serializer.save() 根据传入的参数选择create方法
2.3 Response(serializer.data) 序列化器中的data就是获取到的数据
CreateAPIView
4.2.3 包装分页对象page self.page = paginator.page(page_number)
pagination
保存(更新是获取详情和保存的综合)
5.1.1.1 self.serializer_class 获取自身定义的序列化器类
2 self.list
2.1 serializer = self.get_serializer(data=request.data)传入前端传入的数据 跳到4
6.1 获取当前的分页器,并调用分页器的方法 self.paginator.get_paginated_response(data)
2.3 Response(status=status.HTTP_204_NO_CONTENT)
1 self.post
4.1.1 通过 self._paginator = self.pagination_class 获取分页器
2.2 serializer = self.get_serializer(instance)获取序列化器对象到4
5.1.1 self.get_serializer_class()获取序列化器类,
2.2 serializer.is_valid(raise_exception=True) 验证数据,接下来的所有self 都变成了 跳到5
models
5.1.1 整体空值校验 self.validate_empty_values(data) 校验数据是否为空
4.2.4 把这个page对象转换为一个list 并返回
CreateModelMixin
5.1 self.run_validation(self.initial_data) 传入初始数据并调用run_validation 验证数据
0 条评论
回复 删除
下一页