DRF — самый популярный пакет для создания REST API в Django.
Установка
pip install djangorestframework
# settings.py
INSTALLED_APPS = [
...
'rest_framework',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 20,
}
Сериализатор
# tasks/serializers.py
from rest_framework import serializers
from .models import Task
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = ['id', 'title', 'status', 'priority', 'created_at']
read_only_fields = ['id', 'created_at']
APIView — простой вариант
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
class TaskListAPIView(APIView):
def get(self, request):
tasks = Task.objects.all()
serializer = TaskSerializer(tasks, many=True)
return Response(serializer.data)
def post(self, request):
serializer = TaskSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
ViewSet — полный CRUD
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
class TaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all()
serializer_class = TaskSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
return Task.objects.filter(owner=self.request.user)
Роутер
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('tasks', TaskViewSet)
urlpatterns = [path('api/', include(router.urls))]
# GET/POST /api/tasks/
# GET/PUT/PATCH/DELETE /api/tasks/{id}/
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!