使用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。