本篇文章首席CTO笔记来给大家介绍有关如何控制django序列化结果以及django 反序列化的相关内容,希望对大家有所帮助,一起来看看吧。
本文目录一览:
1、如何优化 Django REST Framework 的性能2、python django 怎么把数据查询结果保存到一个list里面3、在django rest framework的model序列化时,字段有可能是None时的处理办法4、朋友您好,Django model,QuerySet 序列化成json报错5、django 查询数据库得到的结果序列化成json字符串如何优化 Django REST Framework 的性能
解决 Django 「懒惰」的基本方法
现在我们解决这个问题的方法就是「预加载」。从本质上讲,就是你提前警告 Django ORM 你要一遍又一遍的告诉它同样无聊的指令。在上面的例子中,在 DRF 开始获取前很简单地加上这句话就搞定了:
queryset = queryset.prefetch_related('orders')
当 DRF 调用上述相同序列化 customers 时,出现的是这种情况:
获取所有 customers (执行两个往返数据库操作,第一个是获取 customers,第二个获取相关 customers 的所有相关的 orders。)
对于第一个返回的 customers,获取其 order (不需要访问数据库,我们已经在上一步中获取了所需要的数据)
对于第二个返回的 customers,获取其 order (不需要访问数据库)
对于第三个返回的 customers,获取其 order (不需要访问数据库)
对于第四个返回的 customers,获取其 order (不需要访问数据库)
对于第五个返回的 customers,获取其 order (不需要访问数据库)
对于第六个返回的 customers,获取其 order (不需要访问数据库)
你又意识到,你可以有了 很多 customers ,已经不需要再继续等待去数据库。
其实 Django ORM 的「预备」是在第1步进行请求,它在本地高速缓存的数据能够提供步骤2+所要求的数据。与之前往返数据库相比从本地缓存数据中读取数据基本上是瞬时的,所以我们在有很多 customers 时就获得了巨大的性能加速。
解决 Django REST Framework 性能问题的标准化模式
我们已经确定了一个优化 Django REST Framework 性能问题的通用模式,那就是每当序列化查询嵌套字段时,我们就添加一个新的 @staticmethod 名叫 setup_eager_loading ,像这样:
class CustomerSerializer(serializers.ModelSerializer):
orders = OrderSerializer(many=True, read_only=True)
def setup_eager_loading(cls, queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.prefetch_related('orders')
return queryset
这样,不管哪里要用到这个序列化,都只需在调用序列化前简单调用 setup_eager_loading ,就像这样:
customer_qs = Customers.objects.all()
customer_qs = CustomerSerializer.setup_eager_loading(customer_qs) # Set up eager loading to avoid N+1 selects
post_data = CustomerSerializer(customer_qs, many=True).data
或者,如果你有一个 APIView 或 ViewSet ,你可以在 get_queryset 方法里调用 setup_eager_loading :
def get_queryset(self):
queryset = Customers.objects.all()
# Set up eager loading to avoid N+1 selects
queryset = self.get_serializer_class().setup_eager_loading(queryset)
return queryset
python django 怎么把数据查询结果保存到一个list里面
1、新建一个JUPYTER NOTEBOOK文档。
2、定义一个LIST列表并且打印看看结果。list = [3, 9, -7] print(list)。
3、为列表增加一个数字。list.append(10) print(list)。
4、字符串也是可以增加进去的。 list.append("string 123") print(list)。
5、列表里面更是可以含有其它列表。list.append([-3, -4]) print(list)。
6、如果要删除最后一个列表的值,可以这样处理。list.pop() print(list)。
在django rest framework的model序列化时,字段有可能是None时的处理办法
一,model字段
从Model定义中可以看到,env,release这些字段都有可能为None
二,过滤器
六,POSTMAN测试
朋友您好,Django model,QuerySet 序列化成json报错
用那个序列化函数可能需要对queryset以及单个model对象都要做一定的补充序列化实现。
我个人是这么搞得:遍历queryset,把单个对象转成字典,然后每个字典对象添加到一个空列表,然后用json.dumps(dictobject_list)转换json字符串即可。
其它语言里面的JSON object转换也都是整成基础内建对象来解决的。
django 查询数据库得到的结果序列化成json字符串
class GoodsListView(View):
如果遇到无法进行json格式化的格式,例如uuid,需要进行str()函数转换一下
结语:以上就是首席CTO笔记为大家整理的关于如何控制django序列化结果的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django 反序列化、如何控制django序列化结果的相关内容别忘了在本站进行查找喔。