zoukankan      html  css  js  c++  java
  • 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序列化一次

  • 相关阅读:
    Node.js 基础介绍
    你所不知道该如何回答的面试题(一)
    深浅拷贝
    CSRF攻击:陌生链接不要随便点
    跨站脚本攻击(XSS)
    同源策略:为什么XMLHttpRequest不能跨域请求资源?
    HTTP/2:如何提升网络速度
    HTTP/1:HTTP性能优化
    WebComponent:像搭积木一样构建Web应用
    winform 保存文件 打开文件 选择文件 字体样式颜色(流 using System.IO;)
  • 原文地址:https://www.cnblogs.com/zq8421/p/10445168.html
Copyright © 2011-2022 走看看