Django Rest Framework终点

时间:2014-02-17 22:03:12

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用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对象`{&#34; user&#34;:&#34;&#34;,&#34; title&#34;:&#34; &#34;,&#34; slug&#34;:&#34;&#34;}

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