在DRF框架里,ModelSerializers是一個重要的組件。大大的幫組我們節省了數據序列化的過程,真的可以說是良心產品。接手的這個項目用的Django,前人的代碼都是手動序列化的,為了保證風格的一致性我續寫的代碼也都是手動序列化。后來遇到一個問題:有個接口的查詢結果是querySet里的數據有幾千條,而且需要一次性返回,不能做分頁處理。這一下幾千條的遍歷確實是耗費時間的,由此導致了接口的訪問速度過慢。因此想到看有沒有官方優化的序列化功能能來解決這個瓶頸。在某度忙活了好久,查詢到的都是關於DRF框架的ModelSerializers。仔細遍歷完了各個文章,還是找到了一些關於Django serializers的信息。整理如下:
from django.core import serializers order_infos =Order.objects.filter(number=_number,name =_name) #第一個參數為轉化為的數據格式,第二個參數是queryset對象。(必須是queryset對象,不能是查詢后的列表。不然會報錯 'dict' object has no attribute '_meta') 。 json_data = serializers.serialize('json', order_infos)
下面是列舉的一些支持序列化的數據格式:
xml 類似與前端html格式的一種數據格式,用於傳輸和記錄
yaml 也是一種數據格式,和json很像,可是沒有雙引號,可讀性較強。感興趣的小伙伴自習某度
json 這個就不說了,寫接口的接觸的最多。。。(多到想吐)
完成操作以后的感覺:
真特娘的慢,第二個參數是queryset,他序列的時候會把所有的字段都給你序列化出來(暫時是沒有找到指定字段序列化的方法),一點沒有ModelSerializers那么貼心。點開源碼進去一瞅,也是用for循環來遍歷的,而且操作的字段更多了,比手動序列化更費時間。到此為止,此路GG,另求他法吧,老子去也!!!!