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

  • 相关阅读:
    Java--动态代理
    java-finalize
    Oauth1.0认证过程
    深入理解-HashMap
    Java--对象内存布局
    Java--finally
    一个非常有用的算法---统计二进制数中1的个数
    进程之间通信
    SpringMVC听课笔记(十三:使用拦截器)
    SpringMVC听课笔记(十二:文件的上传)
  • 原文地址:https://www.cnblogs.com/zq8421/p/10445168.html
Copyright © 2020-2023  润新知