python---django中序列化
def get_data(req): ret = {'status':True,'data':None} try: user_list = models.User.objects.all() ret['data']=user_list #TypeError at /get_data.html #<QuerySet [<User: dwafwaa>, <User: fwaf>, <User: faw>, <User: fwafwa>]> is not JSON serializable
#json只能序列化基本数据类型,对于对象是不能进行序列化,需要我们使用serializers.serialize except Exception as e: ret['status']=False result = serializers.serialize("json",ret) #typeError: 'module' object is not callable #serializers只能对queryset进行序列化
#这里中ret含有基本数据类型,serializers.serialize不能进行序列化 return HttpResponse(result)
正确使用:
def get_data(req): ret = {'status':True,'data':None} try: user_list = models.User.objects.all() ret['data']=serializers.serialize("json",user_list) #TypeError at /get_data.html #<QuerySet [<User: dwafwaa>, <User: fwaf>, <User: faw>, <User: fwafwa>]> is not JSON serializable #去数据库中取数据时,有格式queryset #其中可以是对象,列表,字典,在外面包着[]列表 #对于对象的序列化,需要我们使用serializers.serialize("json",user_list)进行处理 #对于其他基本类型我们只需要稍微进行转换即可,直接转换为列表(由queryset)list(user_list)即可 #在前端获取的数据就不需要在进行一次反序列化了(对于serialize,我们需要进行一次反序列化,这里没有使用serialize,所以不需要转义) except Exception as e: ret['status']=False result = json.dumps(ret) return HttpResponse(result)
前端使用:
function initData(){ $.ajax({ url:"/get_data.html", type:"get", dataType:"json", success:function(data){ if(data.status){ console.log(data.data) var v = JSON.parse(data.data); #对于我们获取的data.data对应上面serializers.serialize序列化的数据,又被json序列化,所以我们还需要再进行JSON.parse再获取一次 console.log(v) } } }) }