2014-02-17 33 views
1

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

任何想法?

回答

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的对象`{“user”:“”,“title”:“”“,”slug“:”“}

对于任何其他自定义调用,您可以将其他方法添加到主Vie通过DRF装饰器设置(detail_route,list_route)。但遵循这种模式,您可以构建健壮的API。

相关问题