Python全棧開發【Django進階之序列化】

Django序列化

  序列化是將對象狀態轉換爲可保持或傳輸的格式的過程html

  反序列化是指將存儲在存儲媒體中的對象狀態裝換成對象的過程 python

  例如遊戲都有存檔的功能、再次開始的時候只需讀檔便可(這便是一個序列化與反序列的過程)jquery

  序列化也能夠將一個對象傳遞到另外一個地方的ajax

  關於Django中的序列化主要應用在將數據庫中檢索的數據返回給客戶端用戶,特別的Ajax請求通常返回的爲Json格式。數據庫

一、serializersdjango

用於序列化QuerySet中的對象json

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

二、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處理,再顯示出來。app

views.pyspa

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>
相關文章
相關標籤/搜索