【问题标题】:Django Rest Framework end pointsDjango Rest 框架端点
【发布时间】:2014-03-17 09:40:14
【问题描述】:

我有一个相当简单的 obj。它有三个字段,一个用户的 fk、一个标题和 slug(从标题创建)。 slug 字段和用户 fk 一起是唯一的。我想创建一个 API 端点,它具有 url base_url/api-model-name(检索所有 objs)、base_url/api-model-name/username(这用于创建/列表端点。仅此列表将具有 FK 的 obj 返回给用户)。 base_url/username/obj-slug - 用于更新/检索 obj。

有什么想法吗?

【问题讨论】:

    标签: python django python-2.7 django-rest-framework


    【解决方案1】:

    使用 DRF,您可以遵循与此类似的模式。

    models.py

    class Foo(models.Model):
        user = models.ForeignKey(User)
        title = models.CharField(max_length=100)
        slug = models.SlugField(max_length=50)
    
        class Meta:
            unique_together = ('user', 'slug')
    

    serializers.py

    from rest_framework import serializers
    
    from .models import Foo
    
    
    class FooSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = Foo
    

    views.py

    from rest_framework.permissions import IsAuthenticated
    
    from .models import Foo
    from .serializers import FooSerializer
    
    
    class FooViewSet(viewsets.ModelViewSet):
        serializer_class = FooSerializer
        permission_class = (IsAuthenticated, )
        queryset = Foo.objects.all()
    

    routers.py

    from rest_framework.routers import DefaultRouter
    
    from .views import FooViewSet
    
    
    router = DefaultRouter()
    
    # registers viewset to url
    router.register(r'foos', FooViewSet)
    

    这样,您将拥有以下端点:

    GET /foobars - 检索所有 foobar 对象添加 pk 并获取详细视图

    POST /foobars - 创建 foobar 对象`{"user": "", "title": "", "slug": ""}

    对于任何其他自定义调用,您可以通过 DRF 装饰器(detail_route,list_route)向主 ViewSet 添加其他方法。但是按照这种模式,您可以构建强大的 API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-02
      • 2021-09-11
      • 1970-01-01
      • 2013-10-10
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多