未提供项目描述
项目描述
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
您还可以使用virtualenvwrapper、direnv或任何类似工具来帮助管理您的虚拟环境。
一旦进入活动虚拟环境,请运行:
make dev
这将设置您的本地开发环境,安装所有开发依赖项。
测试(单个Python版本)
要使用虚拟环境中的Python版本运行测试套件,请运行:
make test
测试(所有支持的Python版本)
为了测试多个Python(和包)版本,我们需要
-
在虚拟环境外部安装
nox
。这最好通过pipx
来完成。pipx install nox
-
确保所有支持的Python版本都已安装在您的系统上(例如
python3.10
、python3.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
这将
- 构建一个新的
requirements/development.txt
锁文件,其中包含新添加的包。 - 将已安装的包与
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}
应替换为major
、minor
或patch
之一,具体取决于发布中的更改类型。
该命令将更新pyproject.toml
中的版本,并将更改从更改日志的“Unreleased”部分移动到版本化部分,并为未来的改进创建一个新的“Unreleased”部分。