django rest框架的扩展,以支持简单的边加载
drf-sideloading的Python项目详细描述
:警告:请注意,自0.1.1版以来,在升级时必须考虑到一些主要的API更改!
django rest框架边加载
drf side loading是一个扩展,用于提供相关资源的sideloading功能。侧加载允许相关资源选择性地包含在单个api响应中,从而最小化对api的请求。
快速启动
- 安装DRF侧装:
pip install drf-sideloading
- 导入
SideloadableRelationsMixin
:
fromdrf_sideloading.mixinsimportSideloadableRelationsMixin
- 编写sideloadableserializer 您需要在元数据中定义primary序列化程序,并可以定义预取规则。还要注意可侧加载关系上的many=true。
fromdrf_sideloading.serializersimportSideLoadableSerializerclassProductSideloadableSerializer(SideLoadableSerializer):products=ProductSerializer(many=True)categories=CategorySerializer(source="category",many=True)suppliers=SupplierSerializer(source="supplier",many=True)partners=PartnerSerializer(many=True)classMeta:primary="products"prefetches={"categories":"category","suppliers":"supplier","partners":"partners",}
- 配置侧加载 在ViewSet中包含^ {STR 1 } $ SuteloAdabrErdIsMIXIN < /强> MIXIN,并定义^ {STR 1 } $SuteloAdIdOrthSerialErrSub类,如下面的示例所示。其他的一切都像常规的视图集一样
fromdrf_sideloading.mixinsimportSideloadableRelationsMixinclassProductViewSet(SideloadableRelationsMixin,viewsets.ModelViewSet):""" A simple ViewSet for viewing and editing products. """queryset=Product.objects.all()serializer_class=ProductSerializersideloading_serializer_class=ProductSideloadableSerializer
- 使用侧装支持享受您的API
GET /api/products/?sideload=categories,partners,suppliers,products
{"products":[{"id":1,"name":"Product 1","category":1,"supplier":1,"partners":[1,2,3]}],"categories":[{"id":1,"name":"Category1"}],"suppliers":[{"id":1,"name":"Supplier1"}],"partners":[{"id":1,"name":"Partner1"},{"id":2,"name":"Partner1"},{"id":3,"name":"Partner3"}]}
示例项目
目录example
包含一个使用django rest framework侧加载库的示例项目。您可以使用以下命令设置它并在本地运行它:
cd example
sh scripts/devsetup.sh
sh scripts/dev.sh
贡献
我们欢迎您的贡献,我们非常感谢您的贡献!一点一滴的帮助,总是会有功劳的。
设置供款
source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install -r requirements_dev.txt
测试
$ make test
使用环境矩阵运行测试
$ make tox
在特定环境下运行测试
$ tox --listenvs
py27-django18-drf34
py27-django19-drf34
# ...
$ tox -e py27-django19-drf34
测试覆盖率
$ make coverage
$ make tox
在特定环境下运行测试
$ tox --listenvs
py27-django18-drf34
py27-django19-drf34
# ...
$ tox -e py27-django19-drf34
测试覆盖率
$ make coverage
使用pyenv在本地使用不同的python版本进行测试。
许可证
学分
更改日志
1.3.0(2019-04-23)
修复空的相关字段侧加载错误
- 支持Django 2.2
1.0.0(2018-10-29)
通过自定义序列化程序完全重构侧加载配置。
- 支持Django 2.1
- 支持django rest framework 3.9
0.1.10(2017-07-20)
- 支持Django 2.0
0.1.8(2017-07-20)
- 更改边载关系dict
- 始终需要定义“序列化程序”
- 键被引用到url并在呈现的json中序列化
- 添加指定原始模型字段名的
source
0.1.0(2017-07-20)
- pypi上的第一个版本。