Files
Pinry/core/views.py

80 lines
2.7 KiB
Python
Raw Normal View History

from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
from django_filters.rest_framework import DjangoFilterBackend
2019-02-20 18:03:27 +08:00
from rest_framework import viewsets, mixins, routers
from rest_framework.filters import SearchFilter, OrderingFilter
2019-02-20 18:03:27 +08:00
from rest_framework.viewsets import GenericViewSet
from taggit.models import Tag
2019-02-20 18:03:27 +08:00
2019-02-21 19:24:29 +08:00
from core import serializers as api
2019-02-22 19:05:49 +08:00
from core.models import Image, Pin, Board
from core.permissions import IsOwnerOrReadOnly, OwnerOnlyIfPrivate
from core.serializers import filter_private_pin
2019-02-20 18:03:27 +08:00
class ImageViewSet(mixins.CreateModelMixin, GenericViewSet):
queryset = Image.objects.all()
serializer_class = api.ImageSerializer
def create(self, request, *args, **kwargs):
return super(ImageViewSet, self).create(request, *args, **kwargs)
2019-02-20 18:03:27 +08:00
class PinViewSet(viewsets.ModelViewSet):
serializer_class = api.PinSerializer
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filter_fields = ("submitter__username", 'tags__name', )
ordering_fields = ('-id', )
ordering = ('-id', )
permission_classes = [IsOwnerOrReadOnly("submitter"), OwnerOnlyIfPrivate("submitter")]
def get_queryset(self):
query = Pin.objects.all()
request = self.request
return filter_private_pin(request, query)
2019-02-20 18:03:27 +08:00
2019-02-22 19:05:49 +08:00
class BoardViewSet(viewsets.ModelViewSet):
queryset = Board.objects.all()
serializer_class = api.BoardSerializer
filter_backends = (DjangoFilterBackend, OrderingFilter)
filter_fields = ("submitter__username", )
ordering_fields = ('-id', )
ordering = ('-id', )
permission_classes = [IsOwnerOrReadOnly("submitter"), ]
2019-12-05 23:51:31 +08:00
class BoardAutoCompleteViewSet(
mixins.ListModelMixin,
viewsets.GenericViewSet,
):
queryset = Board.objects.all()
serializer_class = api.BoardAutoCompleteSerializer
filter_backends = (DjangoFilterBackend, OrderingFilter)
filter_fields = ("submitter__username", )
ordering_fields = ('-id', )
ordering = ('-id', )
pagination_class = None
class TagAutoCompleteViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
queryset = Tag.objects.all()
serializer_class = api.TagAutoCompleteSerializer
pagination_class = None
2019-12-10 20:51:45 +08:00
@method_decorator(cache_page(60 * 5))
def list(self, request, *args, **kwargs):
return super(TagAutoCompleteViewSet, self).list(
request,
*args,
**kwargs
)
2019-02-20 18:03:27 +08:00
drf_router = routers.DefaultRouter()
drf_router.register(r'pins', PinViewSet, basename="pin")
2019-02-20 18:03:27 +08:00
drf_router.register(r'images', ImageViewSet)
2019-02-22 19:05:49 +08:00
drf_router.register(r'boards', BoardViewSet)
drf_router.register(r'tags-auto-complete', TagAutoCompleteViewSet)
2019-12-05 23:51:31 +08:00
drf_router.register(r'boards-auto-complete', BoardAutoCompleteViewSet)