序列化
1.Django ajax 为甚么要用序列化 因为django ajax 收发数据只能一字符串的形式 2.为什么python json不能序列化Jquery对象 python json 只能识别 python的类型,所以只能序列化 str list dict... 3.在django 中专门用来序列化的方法
1.对象序列化(类型 QuerySet[obj,])
query_obj = models.UserInfo.objects.all()
ret['data'] = serializers.serialize("json",query_obj)
ret1= json.dumps(ret)
注释:a. 先把ret[ret['data']的值用json序列化 b. 最终把整个返回的字典序列化
2.字典序列化
#例如
#
user_list = models.UserInfo.objects.all().values('id','username')
ret['data'] = list(user_list)
ret1= json.dumps(ret)
注释:a. 先把ret['data'] 转换成list
b. json序列化列表
3.列表学序列化
#例如
user_list = models.UserInfo.objects.all().values_list('id', 'username')
ret['data'] = list(user_list)
ret1= json.dumps(ret)
关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。
知识点扩充
1、serializers
from django.core import serializers
ret = models.BookType.objects.all()
data = serializers.serialize("json", ret)
2.json.dumps
import json
#ret = models.BookType.objects.all().values('caption')
ret = models.BookType.objects.all().values_list('caption')
ret=list(ret)
result = json.dumps(ret)
由于json.dumps时无法处理datetime日期,所以可以通过自定义处理器来做扩展,如:
import json from datetime import date from datetime import datetime class JsonCustomEncoder(json.JSONEncoder): def default(self, field): if isinstance(field, datetime): return o.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(field, date): return o.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, field) # ds = json.dumps(d, cls=JsonCustomEncoder)
1.通过后台渲染数据 返回页面上
views 获得数据
from django.shortcuts import render,HttpResponse # Create your views here. from app01 import models def serialize(request): return render(request,'serialize.html') def get_data(request): user_list = models.UserInfo.objects.all() return render(request,'get_data.html',{'user_list':user_list})
serialize html 渲染数据
"en"> "UTF-8">Title 用户列表
get_data 得到数据
{% for row in user_list%}{% endfor %} {{row.id }} {{ row.username }} {{ row.email }}
过程注释:
通过页面get_data return render() 渲染完毕,返回字符串数据 手动给serialize.html 表格添加
2.若表特别大,回特别耗时间,需要全部渲染完了,才能返回,效率过低。试图:不要反回整个页面,只要数据
试图用json序列化 到前段反序列化
会报错,因为对象是queryset对象,json不能序列该类型
解决方案:对象序列化(类型 QuerySet[obj,])
ret['data'] = serializers.serialize("json",query_obj)
ret1= json.dumps(ret)
serialize.html
"en"> "UTF-8">Title 用户列表
get_data 得到数据
{% for row in user_list%}
{{row.id }}
{{ row.username }}
{{ row.email }}
{% endfor %}
views 获得数据
from django.shortcuts import render,HttpResponse
import json
# Create your views here.
from app01 import models
def serialize(request):
return render(request,'serialize.html')
def get_data(request):
from django.core import serializers
ret={'status':True,'data':None}
try:
user_list = models.UserInfo.objects.all()
ret['data']=serializers.serialize('json',user_list)
except Exception as e:
ret['status']=False
result=json.dumps(ret)
return HttpResponse(result)
如果序列化字典
解决方案:对象序列化(类型 QuerySet[(),])
user_list = models.UserInfo.objects.all().values('id','username')
ret['data'] = list(user_list)
ret1= json.dumps(ret)
serialize.html
Title 用户列表
get_data 得到数据
{% for row in user_list%}{% endfor %} {{row.id }} {{ row.username }} {{ row.email }}
views 获得数据
from django.shortcuts import render,HttpResponse
import json
# Create your views here.
from app01 import models
def serialize(request):
return render(request,'serialize.html')
def get_data(request):
from django.core import serializers
ret={'status':True,'data':None}
try:
user_list = models.UserInfo.objects.all().values('id','username')
ret['data']=list[user_list] #转换成list
except Exception as e:
ret['status']=False
result=json.dumps(ret)
return HttpResponse(result)
列表学序列化
user_list = models.UserInfo.objects.all().values_list('id', 'username')
ret['data'] = list(user_list)
ret1= json.dumps(ret)
serialize.html
Title 用户列表
get_data 得到数据
{% for row in user_list%}{% endfor %} {{row.id }} {{ row.username }} {{ row.email }}
views 获得数据
from django.shortcuts import render,HttpResponse
import json
# Create your views here.
from app01 import models
def serialize(request):
return render(request,'serialize.html')
def get_data(request):
from django.core import serializers
ret={'status':True,'data':None}
try:
user_list = models.UserInfo.objects.all().values_list('id','username')
ret['data']=list[user_list] #转换成list
except Exception as e:
ret['status']=False
result=json.dumps(ret)
return HttpResponse(result)