序列化
什么是序列化(picking)?
我们把变量从内存中变成可存储或传输的过程称之为序列化。
python的序列化库pickle、json
json中python类的序列化操作
- 默认的情况下一个类该怎么被序列化,这些库是不知道的,所以需要手动提供
def st_to_dict(a):
return {'name':a.name,'age':a.age,'course':a.course}
print(json.dumps(a,default=st_to_dict)) #default参数就是告知json如何进行序列化
>>> {"course": "xixingdafa", "name": "linghuchong", "age": 24}
- 有一个一劳永逸的方法就是
return obj.__dict__
json.dumps(a, default=lambda obj: obj.__dict__)
Django中序列化QuerySets用于Ajax回传
from django.core import serializers
def dynmGetYd(request):
options = request.GET.getlist('opt') # Django 可以通过getlist获取传来的数组
yds = YdMain.objects.filter(pk__in=options)
data = serializers.serialize('json',
yds) # 该方法可以序列化queryset,但无法序列化单独的model对象
return JsonResponse(data, safe=False)
- QueryDict这个类字典对象可以一个键对应多个值,特别是在GET请求中,使用getlist()可以将一个键中的所有值取出
- 使用serializers可以序列化Querysets对象集合,无法单独序列化一个模型对象
- 有另一种方式序列化QuerySets,使用objects的values方法获取结果集的每个属性的字典表示,并转换为list,将list直接交给JsonResponse处理序列化问题
def ydAPI(request): all = YdMain.objects.all().values() print(all) data = list(all) data = { 'code': 0, 'msg': '', 'count': 10, 'data': data } return JsonResponse(data, safe=False)