django rest框架的扩展,以支持简单的边加载

drf-sideloading的Python项目详细描述


Package IndexBuild StatusCode CoverageDocumentation StatusLicense is MITCode style Black

:警告:请注意,自0.1.1版以来,在升级时必须考虑到一些主要的API更改!

django rest框架边加载

drf side loading是一个扩展,用于提供相关资源的sideloading功能。侧加载允许相关资源选择性地包含在单个api响应中,从而最小化对api的请求。

快速启动

  1. 安装DRF侧装:
pip install drf-sideloading
  1. 导入SideloadableRelationsMixin
fromdrf_sideloading.mixinsimportSideloadableRelationsMixin
  1. 编写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",}
  1. 配置侧加载 在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
  1. 使用侧装支持享受您的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

使用pyenv在本地使用不同的python版本进行测试。

许可证

MIT

学分

更改日志

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上的第一个版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java爬虫获取外部网站搜索结果   java Bluestack未连接到eclipse   java如何从ConstraintViolationException Hibernamte获取数据库字段名   HttpResponse HttpResponse=httpClient引发java运行时错误。执行(httpPost);   Jama中矩阵的java点积和叉积   java有什么方法可以唯一地识别可扩展设备吗?   java我需要用*来写我的名字,但我不断遇到一个错误,我对编码很陌生   java变量是在内部类中访问的。需要被宣布为最终决定。但我不想宣布最终结果   java如何缩短base64图像字符串,Android?   JavaSpringMVC:计划方法不自动触发   图形学习Java 2D API的好资源是什么?   如何在java中对方法进行排队   java JavaFX多行   java Selenium无法在[链接]上找到基于CSS元素的密码字段元素http://www.cartasi.it/gtwpages/index.jsp   Java中的equals()和hashCode()契约   软删除情况下的java Hibernate二级缓存   java为什么这段代码要两次调用这些方法?