views.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from django.shortcuts import render
  2. from rest_framework.response import Response
  3. from rest_framework.decorators import api_view, permission_classes
  4. from rest_framework.generics import RetrieveAPIView
  5. from rest_framework.status import HTTP_201_CREATED, HTTP_400_BAD_REQUEST
  6. from rest_framework.permissions import IsAuthenticatedOrReadOnly
  7. from main.models import Ad, Comment
  8. from .serializers import AdSerializer, AdDetailSerializer, CommentSerializer
  9. # Выдаем список объявлений
  10. @api_view(['GET'])
  11. def ads(request):
  12. if request.method == 'GET':
  13. ads = Ad.objects.filter(is_active=True)[:10]
  14. serializer = AdSerializer(ads, many=True)
  15. return Response(serializer.data)
  16. # Выдаем сведения о выбранном объявлении
  17. class AdDetailView(RetrieveAPIView):
  18. queryset = Ad.objects.filter(is_active=True)
  19. serializer_class = AdDetailSerializer
  20. # Добавлять комментарий разрешено только зарегистрированным пользователям
  21. # Просматривать комментарии разрешено всем
  22. @api_view(['GET', 'POST'])
  23. @permission_classes((IsAuthenticatedOrReadOnly,))
  24. def comments(request, pk):
  25. if request.method == 'POST':
  26. serializer = CommentSerializer(data=request.data)
  27. if serializer.is_valid():
  28. serializer.save()
  29. return Response(serializer.data, status=HTTP_201_CREATED)
  30. else:
  31. return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
  32. else:
  33. comments = Comment.objects.filter(is_active=True, ad=pk)
  34. serializer = CommentSerializer(comments, many=True)
  35. return Response(serializer.data)