Django之序列化
-
序列化含义:
- 我们把变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上
- 反过来,把变量内容从序列化的字符串对象重新读到内存里变为原来的变量称之为反序列化
-
Django的序列化操作
需求:将数据库中的数据通过ajax方式展示到页面
-
1、直接将带有数据的页面(get_data.html)渲染好传递到前端页面(xuliehua.html)中,通过ajax追加到页面上,但是这种方式每次都需要把页面传递到前端,不建议使用此方法
views.py:
from app01 import models def xuliehua(request): return render(request, 'xuliehua.html') def get_data(request): user_list = models.UserInfo.objects.all() return render(request, 'get_data.html', {'user_list':user_list})
xuliehua.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>用户列表</h1> <table id="tb"> </table> <script src="/static/jquery-3.3.1.js"></script> <script> $(function(){ initData(); }); function initData(){ $.ajax({ url:'/get_data.html', type:'GET', success:function (arg) { $('#tb').append(arg); } }) } </script> </body> </html>
get_data.html:
{% for row in user_list %} <tr> <td>{{ row.id }}</td> <td>{{ row.username }}</td> <td>{{ row.email }}</td> </tr> {% endfor %}
models.py:
from django.db import models # Create your models here. class UserInfo(models.Model): username = models.CharField(max_length=32) email = models.EmailField(max_length=32) def __str__(self): return self.username
-
2、关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式
-
序列化的对象是 Django 的 QuerySet 里是 obj 对象形式的数据结构 :[obj, obj, obj] —> 使用 serializers.serialize() 转换成可以进行序列化的数据格式之后,再使用 json.dumps() 序列化
from django.core import serializers ret = models.Book.objects.all() data = serializers.serialize("json", ret)
views.py:
from app01 import models from django.core import serializers import json def xuliehua(request): return render(request, 'xuliehua.html') def get_data(request): ret = {'status': True, 'data': None} try: user_list = models.UserInfo.objects.all() # 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)
xuliehua.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>用户列表</h1> <table id="tb"> </table> <script src="/static/jquery-3.3.1.js"></script> <script> $(function(){ initData(); }); function initData(){ $.ajax({ url:'/get_data.html', type:'GET', dataType:'JSON', success:function (arg) { if(arg.status){ // console.log(arg.data); var v = JSON.parse(arg.data); console.log(v); } } }) } </script> </body> </html>
-
序列化的对象是 Django 的 QuerySet 里是 字典或元组 形式的数据结构 :[{}, {}, {}]、[(), (), ()] —> 使用 list 转化为列表后进行 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)
views.py:
from app01 import models from django.core import serializers import json def xuliehua(request): return render(request, 'xuliehua.html') def get_data(request): ret = {'status': True, 'data': None} try: user_list = models.UserInfo.objects.all().values('id', 'username') # user_list = models.UserInfo.objects.all().values_list('id', 'username') ret['data'] = list(user_list) except Exception as e: ret['status'] = False result = json.dumps(ret) return HttpResponse(result)
xuliehua.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>用户列表</h1> <table id="tb"> </table> <script src="/static/jquery-3.3.1.js"></script> <script> $(function(){ initData(); }); function initData(){ $.ajax({ url:'/get_data.html', type:'GET', dataType:'JSON', success:function (arg) { if(arg.status){ console.log(arg.data); } } }) } </script> </body> </html>

浙公网安备 33010602011771号