跳转到主要内容

Django REST Framework中嵌套路由的支持

项目描述

drf-nested-resources

这是一个django rest framework扩展,允许开发者创建嵌套资源。

如何使用

嵌套资源的配置

在这个例子中,我们将创建一个简单的API,具有以下端点

/developers/
/developers/<id>
/developers/<id>/languages/
/developers/<id>/languages/<id>

首先,我们从以下Django模型开始

from django.db.models import CASCADE
from django.db.models.base import Model
from django.db.models.fields import CharField
from django.db.models.fields.related import ForeignKey


class Developer(Model):

    name = CharField(max_length=20)


class ProgrammingLanguage(Model):

    name = CharField(max_length=20)

    author = ForeignKey(
        Developer, 
        related_name='programming_languages', 
        on_delete=CASCADE,
    )

我们将为开发者语言资源集合创建两个视图集。

from rest_framework.viewsets import ModelViewSet
from drf_nested_resources.fields import HyperlinkedNestedModelSerializer


class _DeveloperSerializer(HyperlinkedNestedModelSerializer):

    class Meta(object):

        model = Developer

        fields = ('url', 'name', 'programming_languages')


class DeveloperViewSet(ModelViewSet):

    queryset = Developer.objects.all()

    serializer_class = _DeveloperSerializer


class _ProgrammingLanguageSerializer(HyperlinkedNestedModelSerializer):

    class Meta(object):

        model = ProgrammingLanguage

        fields = ('url', 'name', 'author')


class ProgrammingLanguageViewSet(ModelViewSet):

    queryset = ProgrammingLanguage.objects.all()

    serializer_class = _ProgrammingLanguageSerializer

视图集中的相关字段authorprogramming_languages应遵循模型表示,以便author为我们提供编写ProgrammingLanguage的开发者的URL,而programming_languages应为我们提供开发者所编写的ProgrammingLanguages的URL列表。

这是生成它们的urlpatterns的方法

_RESOURCES = [
    Resource(
        'developer',
        'developers',
        DeveloperViewSet,
        [
            NestedResource(
                'language',
                'languages',
                ProgrammingLanguageViewSet,
                parent_field_lookup='author',
                )
            ],
        ),
    ]
urlpatterns = make_urlpatterns_from_resources(_RESOURCES)

有关不同关系和授权的更多示例,请查看测试套件。

变更日志

版本 2.0.0

添加了对Django 2.2的支持,并移除了对Django < 2.2的支持

版本 1.3

更新了依赖关系并添加了覆盖率配置

版本 1.2 Beta 3

修复了当请求未显式设置urlconf时的错误

版本 1.2 Beta 2

修复了在ancestry中的视图集中检查权限时对非基于会话的身份验证器的支持

版本 1.2 Beta 1

实现了将嵌套资源中的字段值强制设置为向上资源URL的能力。这是通过序列化器的Meta类上的可选属性field_forced_to_ancestor来实现的。

版本 1.1

重新设计了URL生成机制,以支持交叉链接资源树。

重大变更:任何对当前请求URL中变量上的多对多字段的前期使用现在将失效。

版本 1.0 Release Candidate 3

添加了对命名空间URL的正确支持

版本 1.0 Release Candidate 1

添加了对Django 1.10和Rest Framework 3.4.3的支持

版本 1.0 Beta 1 (未发布)

初始发布。

项目详情


下载文件

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

源分发

drf-nested-resources-2.0.0.tar.gz (9.0 kB 查看哈希值)

上传时间

构建分发

drf_nested_resources-2.0.0-py2-none-any.whl (12.4 kB 查看哈希值)

上传时间 Python 2

由...