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==============================
<body>
<h1>用户列表</h1>
<table id="tb">
</table>
<script src="/static/js/jquery-3.3.1.js"></script>
<script>
$(function () {
initData();
})
function initData() {
$.ajax({
url:'/get_data/',
type:'GET',
success:function (arg) {
$('#tb').append(arg)
}
})
}
</script>
</body>


===================================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==============================
<body>
<h1>用户列表</h1>
<table id="tb">
</
table>
<script src="/static/js/jquery-3.3.1.js"></script>
<script>
$(function () {
initData();
})
function initData() {
$.ajax({
url:'/get_data/',
type:'GET',
dataType:'JSON',// 接收数据的格式,反序列化
success:function (arg)
{
if(arg.status){
v = JSON.parse(arg.data); //因为data被序列化了2次,所以这里还要再反序列化一次
console.log(v)
}
}
})
}
</script>

 

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序列化一次

 

posted @ 2019-02-27 17:23  烛爻  阅读(227)  评论(0编辑  收藏  举报