/
eb
/
kittygram2plus
Обзор
Документация
Войти
/
eb
/
kittygram2plus
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
cats/views.py
63 строки
3 KB
Evgeniy Budaev
CORS
21 июл 2021, 07:02
21 июл 2021, 07:02
9b894a1
Код
Авторство
О чём код?
from rest_framework import viewsets from rest_framework.throttling import AnonRateThrottle from rest_framework import permissions from rest_framework.pagination import PageNumberPagination from rest_framework.pagination import LimitOffsetPagination from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters from .models import Achievement, Cat, User from .serializers import AchievementSerializer, CatSerializer, UserSerializer from .permissions import OwnerOrReadOnly, ReadOnly from .throttling import WorkingHoursRateThrottle from .pagination import CatsPagination class CatViewSet(viewsets.ModelViewSet): queryset = Cat.objects.all() serializer_class = CatSerializer permission_classes = (OwnerOrReadOnly,) # throttle_classes = (AnonRateThrottle,) # Если кастомный тротлинг-класс вернет True - запросы будут обработаны # Если он вернет False - все запросы будут отклонены # с 3-х до 5-ти утра все запросы к котикам будут отклонены. throttle_classes = (WorkingHoursRateThrottle,) # Для любых пользователей установим кастомный лимит 1 запрос в минуту # Если запрос разрешен - применится лимит low_request # throttle_scope = 'low_request' # Пагинация # pagination_class = PageNumberPagination # pagination_class = LimitOffsetPagination pagination_class = None # временно отключили CatsPagination # Указываем фильтрующий бэкенд DjangoFilterBackend # Из библиотеки django-filter filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter) # Фильтровать будем по полям color и birth_year модели Cat filterset_fields = ('color', 'birth_year', 'achievements__name', 'owner__username') search_fields = ('name',) ordering_fields = ('name', 'birth_year') ordering = ('birth_year',) def perform_create(self, serializer): serializer.save(owner=self.request.user) def get_permissions(self): # Если в GET-запросе требуется получить информацию об объекте if self.action == 'retrieve': # Вернем обновленный перечень используемых пермишенов return (ReadOnly(),) # Для остальных ситуаций оставим текущий перечень пермишенов # без изменений return super().get_permissions() class UserViewSet(viewsets.ReadOnlyModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer class AchievementViewSet(viewsets.ModelViewSet): queryset = Achievement.objects.all() serializer_class = AchievementSerializer