天天看點

Django Rest Framework動态擷取字段

項目名稱

  • drf-dynamic-fields

項目描述

  • 提供了一個mixin,用于serializer,實作動态配置傳回字段的效果。在擷取資料的API的時候,在URL中加入一個查詢字段fields,用來過濾傳回資料的字段,減少網絡傳輸的資料。
  • github位址: https://github.com/dbrgn/drf-dynamic-fields

安裝

pip install drf-dynamic-fields           
  • 如果不想在項目中多加一個庫,也可以直接将項目中drf_dynamic_fields目錄下的init.py檔案中的類直接複制出來到自己的項目中。 直接下載下傳init檔案 --> 點這裡

配置

  • 在建立serializer的時候,把DynamicFieldsMixin這個mixin加上即可。
  • 下面的代碼是一個示例,我們建立了一個BookSerializer,加入了DynamicFieldsMixin。
    from rest_framework import serializers
    from drf_dynamic_fields import DynamicFieldsMixin
    from .models import Book
    
    class BookSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
        class Meta:
            model = Book
            fields = '__all__'           

然後,就可以直接用了~

使用

  • 我們可以在url中使用fields來指定要傳回的字段,例如我們在查詢中僅需要擷取圖書的書名(name)和作者(author),那麼URL可以寫成這個樣子,多個字段間使用逗号分隔即可:
    GET https://wxy.email/book/?fields=name,author           
  • 對于擷取單條資訊的查詢也同樣好使:
    GET https://wxy.email/book/666/?fields=name,author           
  • 如果我們僅僅需要某些字段不顯示,則可以使用omit參數省略一些字段,例如我們在查詢中其他的資訊都要,但是圖書描述資訊字段(description)不要,那麼我們可以把URL寫成這個樣子:
    GET https://wxy.email/book/?omit=description           
  • 參考資訊: 作者在github項目中實際上說到為了保持項目的簡單,實際上已經不再接受新需求的添加了。
  • 如果需要更強大的字段動态擷取功能,則可以參考這個項目 https://github.com/rsinger86/drf-flex-fields
  • 參考連結: 時光不寫部落格-Django Rest Framework 動态擷取字段
  • 本文轉載自: knktc