Django-----ajax序列化

序列化

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) 
View Code

 

 

 

 

 

 

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




用户列表

"tb">

 get_data      得到数据

{% for row in user_list%}
    
        {{row.id }}
        {{ row.username }}
       {{ row.email }}
    
{% endfor %}

  过程注释:

    通过页面get_data return render() 渲染完毕,返回字符串数据 手动给serialize.html 表格添加

  

2.若表特别大,回特别耗时间,需要全部渲染完了,才能返回,效率过低。试图:不要反回整个页面,只要数据

试图用json序列化 到前段反序列化

 Django-----ajax序列化_第1张图片

   会报错,因为对象是queryset对象,json不能序列该类型

Django-----ajax序列化_第2张图片

 

解决方案:对象序列化(类型 QuerySet[obj,]) 
ret['data'] = serializers.serialize("json",query_obj)

ret1= json.dumps(ret)

serialize.html

"en">

    "UTF-8">
    Title


用户列表

"tb">

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%}
    
        {{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().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%}
    
        {{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().values_list('id','username')
ret['data']=list[user_list] #转换成list

except Exception as e:
ret['status']=False
result=json.dumps(ret)
return HttpResponse(result)

转载于:https://www.cnblogs.com/honglingjin/p/6567904.html

你可能感兴趣的:(json,python,数据库)