我写获取数据的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