zoukankan      html  css  js  c++  java
  • Python全栈开发【Django进阶之序列化】

    Django序列化

      序列化是将对象状态转换为可保持或传输的格式的过程

      反序列化是指将存储在存储媒体中的对象状态装换成对象的过程 

      例如游戏都有存档的功能、再次开始的时候只需读档即可(这即是一个序列化与反序列的过程)

      序列化也可以将一个对象传递到另一个地方的

      关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。

    1、serializers

    用于序列化QuerySet中的对象

    from django.core import serializers
      
    ret = models.BookType.objects.all()
      
    data = serializers.serialize("json", ret)
    

    2、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)
    

    JsonResponse

    另外也可以用JsonResponse传递一个数组或字典到网页,由JS处理,再显示出来。

    views.py

    from django.http import HttpResponse
    import json
     
    def ajax_list(request):
        a = range(100)
        return HttpResponse(json.dumps(a), content_type='application/json')
     
    def ajax_dict(request):
        name_dict = {'twz': 'Love python and Django', 'zqxt': 'I am teaching Django'}
        return HttpResponse(json.dumps(name_dict), content_type='application/json')
    
    from django.http import JsonResponse
     
    def ajax_list(request):
        a = range(100)
        return JsonResponse(a, safe=False)
     
    def ajax_dict(request):
        name_dict = {'twz': 'Love python and Django', 'zqxt': 'I am teaching Django'}
        return JsonResponse(name_dict)
    

    index.html

    <!DOCTYPE html>
    <html>
    <body>
    <p>请输入两个数字</p>
    <form action="/add/" method="get">
        a: <input type="text" id="a" name="a"> <br>
        b: <input type="text" id="b" name="b"> <br>
        <p>result: <span id='result'></span></p>
        <button type="button" id='sum'>提交</button>
    </form>
     
     
    <div id="dict">Ajax 加载字典</div>
    <p id="dict_result"></p>
     
    <div id="list">Ajax 加载列表</div>
    <p id="list_result"></p>
     
     
    <script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
          // 求和 a + b
          $("#sum").click(function(){
            var a = $("#a").val();
            var b = $("#b").val();
     
            $.get("/add/",{'a':a,'b':b}, function(ret){
                $('#result').html(ret);
            })
          });
     
          // 列表 list
          $('#list').click(function(){
              $.getJSON('/ajax_list/',function(ret){
                //返回值 ret 在这里是一个列表
                for (var i = ret.length - 1; i >= 0; i--) {
                  // 把 ret 的每一项显示在网页上
                  $('#list_result').append(' ' + ret[i])
                };
              })
          })
     
          // 字典 dict
          $('#dict').click(function(){
              $.getJSON('/ajax_dict/',function(ret){
                  //返回值 ret 在这里是一个字典
                  $('#dict_result').append(ret.twz + '<br>');
                  // 也可以用 ret['twz']
              })
          })
        });
    </script>
    </body>
    </html>
    

      

  • 相关阅读:
    关于ios6.0和5.0的横竖屏支持方法
    windows环境下搭建vue+webpack的开发环境
    诗歌类网址
    【第1阶段—GIS网址清单】其它杂项
    android内存指标
    Rownum与Order by
    使用反射复制一个JavaBean的对象
    catalog
    oralce中rownum理解
    BlockingQueue
  • 原文地址:https://www.cnblogs.com/mocean/p/6602483.html
Copyright © 2011-2022 走看看