1. 程式人生 > >淺談序列化(1)

淺談序列化(1)

引用廖雪峰 序列化基礎

學了一段時間RESTful框架,主要思想是序列化應用和反序列化額應用,老師一般都是從技術層面講的,我以一個小白的層面分享一下理解.
簡而言之,序列化和反序列化,就是對資料格式的轉換.
後端程式基本上都是在操作資料庫, web開發的三個部分就是前端 後端 和資料庫,我們在瞭解資料庫的基本操作的基礎上,主要在學怎麼用學習個各種框架編寫操作資料庫的程式,從而返回給前端,已達到使用者和資料庫的互動目的.
但是前端返回的資料格式,與資料庫識別的格式有差異,需要轉換,這就涉及到序列化的問題.反過來,我們從資料庫取出來資料要返回給前端讓模板渲染出來,直接查詢到的是包含記憶體地址的物件資訊,不能直接渲染,就需要編碼,這以來一回的過程就是序列化與反序列化.
所以 總結一下 基本上可以表達為 資料存入資料庫需要序列化,從資料庫取出資料需要反序列化.

而目前就python程式設計說,前後端互動的流行資料格式是json 所以 就python程式設計而言,序列化與反序列化可以記憶為,前端傳回來的json資料想要存入資料庫,需要序列化操作,前端想要查詢資料庫的資料,需要從資料庫取出資料反序列化成字典,然後轉化成json格式的資料再傳給前端.

下面是檢視 部分程式碼

# 引入apiview檢視 
class HeroesView(APIView):
#前端查詢資料
  def get(self, request):
        # 設定獲取引數為外來鍵
        pk = request.query_params.get('pk')
         #如果想返回所有資料
        # h_list = HeroInfo.objects.all() 
        serializer = serializers.HeroSerializer(h_list, many=True)
        return Response(serializer.data)
#前端修改資料庫
    def post(self, request):
        #建立 , 接受資料  用一個容器接受傳來的字典
        json_dict = request.data
        #注:其實需要 驗證 和儲存接受的資料是否合法 這裡 由APIView的封裝完成
        serializer = serializers.HeroSerializer(data=json_dict)
        #         驗證失敗丟擲異常需要手動建立
        serializer.is_valid(raise_exception=True)
        hero = serializer.save()

        #         返回資料
        serializer = serializers.HeroSerializer(hero)
        return Response(serializer.data, status=status.HTTP_201_CREATED)

下面是serializer 部分的程式碼

class HeroSerializer(serializers.ModelSerializer):
    hbook_id = serializers.IntegerField()
    hbook = serializers.StringRelatedField(read_only=True)

    class Meta:
     # 注意大小寫和model拼寫
        model = HeroInfo 
        fields = '__all__'