Django序列化


Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。

方式一:

=============================views.py==========================
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==============================

用户列表








===================================get_data.html===========================
{% for row in user_list %}
<tr>
<td>{{ row.id }}td>
<td>{{ row.username }}td>
<td>{{ row.email }}td>
tr>
{%
endfor %}

 方式二:

1、

================================views.py==============================
def
serialize(request): return render(request,'serialize.html') import json from django.core import serializers def get_data(request): ret = {'status':True,'data':None} try: user_list = models.UserInfo.objects.all() # serialize只能序列化QuerySet,里面要是一个一个的对象. QuerySet [obj,obj,obj] ret['data'] = serializers.serialize('json',user_list) except Exception as e: ret['status'] = False result = json.dumps(ret) return HttpResponse(result)

=============================serialize.html==============================

用户列表



table>
<script src="/static/js/jquery-3.3.1.js">

dataType:‘JSON’ 此时的作用是把后端返回过来的JSON字符(ret)先反序列化,再给参数arg,但是arg.data也序列化过,所以需要对arg.data再反序列化一次。

以下是对dataType参数jquery api的解释:

可以看到,数据对象已经能拿到了

2、

如果对数据库的操作是

  models.UserInfo.objects.all().values()

  models.UserInfo.objects.all().values_list()

只需进行一次反序列化即可,因为values()拿到的是字典,values_list()拿到的是列表,都是python基本数据类型,可直接

用 json.dumps()序列化。而如果是QuerySet则不行,需要单独对QuerySet序列化一次