淺談序列化(1)
阿新 • • 發佈:2018-12-28
學了一段時間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__'