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

  • 相关阅读:
    常用命令
    添加云存储服务
    安装Prometheus-Opeartor
    Prometheus-operator架构详解
    Helm使用详解
    莫队乱搞--BZOJ2038: [2009国家集训队]小Z的袜子(hose)
    BZOJ1443: [JSOI2009]游戏Game
    BZOJ2006: [NOI2010]超级钢琴
    BZOJ4408: [Fjoi 2016]神秘数
    hdu6110:路径交
  • 原文地址:https://www.cnblogs.com/zq8421/p/10445168.html
Copyright © 2020-2023  润新知