跳转到主要内容

未提供项目描述

项目描述

Django REST Framework Recursive (Fork)

此仓库是django-rest-framework-recursive的友好分支,由heywbj创建。由于原始仓库不再活跃维护,我们在此友好分支中承担了对Python、Django和Django Rest Framework现代版本的维护工作。

提供了一个RecursiveField,它允许您序列化树、链表,甚至是有向无环图。它还支持验证、反序列化、ModeSerializer和多步骤递归结构。

示例用法

树递归

from rest_framework import serializers
from django_rest_framework_recursive.fields import RecursiveField

class TreeSerializer(serializers.Serializer):
    name = serializers.CharField()
    children = serializers.ListField(child=RecursiveField())

链表递归

from rest_framework import serializers
from django_rest_framework_recursive.fields import RecursiveField

class LinkSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=25)
    next = RecursiveField(allow_null=True)

更多用例在测试中记录,请参阅[这里][tests]获取更多用法示例

先决条件

此包支持

  • Python 3.10, 3.11, 3.12
  • Django 3.2, 4.0, 4.1, 4.2, 5.0, 5.1
  • Django Rest Framework 3.12, 3.13, 3.14, 3.15

有关测试的精确版本组合列表,请参阅noxfile中设置的valid_version_combinations

在开发期间,您还需要

  • 安装系统包中的uv
  • pre-commit 3 (可选,但强烈推荐)

安装

使用pip安装...

pip install drf-recursive

本地开发

在做出更改时,请记得更新CHANGELOG.md,它遵循keepachangelog的指南。在您创建PR时,将您的更改添加到[Unreleased]部分。

安装

确保安装并使用上述Python中的一个通过python可执行文件:****

python --version
Python 3.10.13   # or any of the supported versions

确保uv作为系统包安装。可以使用pipx或Homebrew来完成。

然后创建并激活一个虚拟环境。如果您没有其他管理虚拟环境的方法,可以通过运行以下命令完成:

uv venv
source .venv/bin/activate

您还可以使用virtualenvwrapperdirenv或任何类似工具来帮助管理您的虚拟环境。

一旦进入活动虚拟环境,请运行:

make dev

这将设置您的本地开发环境,安装所有开发依赖项。

测试(单个Python版本)

要使用虚拟环境中的Python版本运行测试套件,请运行:

make test

测试(所有支持的Python版本)

为了测试多个Python(和包)版本,我们需要

  • 在虚拟环境外部安装nox。这最好通过pipx来完成。

    pipx install nox
    
  • 确保所有支持的Python版本都已安装在您的系统上(例如python3.10python3.11等)。这可以通过pyenv来完成。

然后运行nox

nox

Nox将为noxfile.py中定义的Python和包版本组合的每个组合创建一个单独的虚拟环境。

要列出可用的会话,请运行:

nox --list-sessions

要运行特定Nox会话中的测试套件,请使用:

nox -s $SESSION_NAME

静态分析

使用以下命令运行所有静态分析工具:

make lint

自动格式化

使用以下命令将代码格式化以符合我们的约定:

make format

依赖项

包依赖项声明在pyproject.toml中。

  • package依赖项在[project]部分的dependencies数组中。
  • development依赖项在[project.optional-dependencies]部分的dev数组中。

对于本地开发,pyproject.toml中声明的依赖项使用requirements/development.txt锁文件固定到特定版本。

添加新的依赖项

要安装新的Python依赖项,请将其添加到pyproject.toml中适当的部分,然后运行:

make dev

这将

  1. 构建一个新的requirements/development.txt锁文件,其中包含新添加的包。
  2. 将已安装的包与requirements/development.txt中固定的版本同步。

除非需要新包,否则这不会更改任何已存在于任何需求文件中的包的固定版本,即使有这些包的更新版本可用。

请记住将更改的requirements/development.txt文件与更改的pyproject.toml一起提交。

删除依赖项

删除Python依赖项的方式完全相同:编辑pyproject.toml,然后运行make dev

更新所有Python包

要更新所有包的固定版本,只需运行:

make update

这将更新requirements/development.txt锁文件中每个包的固定版本,以符合pyproject.toml中的约束。

然后您可以运行

make dev

以将已安装的包与requirements/development.txt中更新的版本同步。

更新单个Python包

使用以下命令升级单个开发依赖项:

uv pip compile -P $PACKAGE==$VERSION pyproject.toml --extra=dev --output-file=requirements/development.txt

然后您可以运行

make dev

以将已安装的包与requirements/development.txt中更新的版本同步。

版本控制

此项目使用SemVer进行版本控制,版本号后没有附加后缀。当是时候发布新版本时,运行命令make version_{type},其中{type}应替换为majorminorpatch之一,具体取决于发布中的更改类型。

该命令将更新pyproject.toml中的版本,并将更改从更改日志的“Unreleased”部分移动到版本化部分,并为未来的改进创建一个新的“Unreleased”部分。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

drf_recursive-0.4.0.tar.gz (7.4 kB 查看哈希值)

上传时间 源代码

构建分发

drf_recursive-0.4.0-py3-none-any.whl (6.6 kB 查看哈希值)

上传时间 Python 3

由以下组织支持