Django Rest Framework 動態獲取字段

我寫獲取數據的API的時候,喜歡在URL中加入一個查詢字段fields,用來過濾返回數據的字段,這樣就能夠作到我想返回哪些字段的數據就返回哪些字段的數據,減小網絡傳輸的數據。
可是在使用Django Rest Framework的時候卻發現框架默認並無帶有這樣的功能。在網上進行搜索後在github上發現了一個名爲「drf-dynamic-fields」的庫,試用後發現問題完美解決了。git

安裝

項目名稱:drf-dynamic-fields
項目描述:本項目提供了一個mixin,用於serializer,實現動態配置返回字段的效果。
github地址:https://github.com/dbrgn/drf-...github

安裝起來很簡單,直接使用pip執行如下命令便可:後端

pip install drf-dynamic-fields

配置

在建立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能夠寫成這個樣子,多個字段間使用逗號分隔便可:flex

GET https://knktc.com/book/?fields=name,author

固然對於獲取單條信息的查詢也一樣好使:url

GET https://knktc.com/book/666/?fields=name,author

若是咱們僅僅須要某些字段不顯示,則可使用omit參數省略一些字段,例如咱們在查詢中其餘的信息都要,可是圖書描述信息字段(description)不要,那麼咱們能夠把URL寫成這個樣子:rest

GET https://knktc.com/book/?omit=description

參考信息

做者在github項目中實際上說到爲了保持項目的簡單,實際上已經再也不接受新需求的添加了,若是須要更強大的字段動態獲取功能,則能夠參考這個項目https://github.com/rsinger86/...code

歡迎訪問個人blog,獲取更多後端問題解決方案: https://knktc.com/blog

相關文章
相關標籤/搜索