2019-12-09 20:27:13 +08:00
|
|
|
from django.utils.decorators import method_decorator
|
|
|
|
|
from django.views.decorators.cache import cache_page
|
2019-02-21 19:03:55 +08:00
|
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
2019-02-20 18:03:27 +08:00
|
|
|
from rest_framework import viewsets, mixins, routers
|
2019-02-21 18:11:08 +08:00
|
|
|
from rest_framework.filters import SearchFilter, OrderingFilter
|
2019-02-20 18:03:27 +08:00
|
|
|
from rest_framework.viewsets import GenericViewSet
|
2019-12-09 20:27:13 +08:00
|
|
|
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
|
2020-02-11 13:31:55 +08:00
|
|
|
from core.permissions import IsOwnerOrReadOnly, OwnerOnlyIfPrivate
|
2020-02-11 16:37:38 +08:00
|
|
|
from core.serializers import filter_private_pin, filter_private_board
|
2019-02-20 18:03:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ImageViewSet(mixins.CreateModelMixin, GenericViewSet):
|
|
|
|
|
queryset = Image.objects.all()
|
|
|
|
|
serializer_class = api.ImageSerializer
|
|
|
|
|
|
2019-02-20 19:01:40 +08:00
|
|
|
def create(self, request, *args, **kwargs):
|
2019-02-21 13:14:15 +08:00
|
|
|
return super(ImageViewSet, self).create(request, *args, **kwargs)
|
2019-02-20 19:01:40 +08:00
|
|
|
|
2019-02-20 18:03:27 +08:00
|
|
|
|
|
|
|
|
class PinViewSet(viewsets.ModelViewSet):
|
|
|
|
|
serializer_class = api.PinSerializer
|
2019-02-21 19:03:55 +08:00
|
|
|
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
|
|
|
|
|
filter_fields = ("submitter__username", 'tags__name', )
|
|
|
|
|
ordering_fields = ('-id', )
|
|
|
|
|
ordering = ('-id', )
|
2020-02-11 13:31:55 +08:00
|
|
|
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):
|
|
|
|
|
serializer_class = api.BoardSerializer
|
|
|
|
|
filter_backends = (DjangoFilterBackend, OrderingFilter)
|
|
|
|
|
filter_fields = ("submitter__username", )
|
|
|
|
|
ordering_fields = ('-id', )
|
|
|
|
|
ordering = ('-id', )
|
2020-02-11 16:37:38 +08:00
|
|
|
permission_classes = [IsOwnerOrReadOnly("submitter"), OwnerOnlyIfPrivate("submitter")]
|
|
|
|
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
|
return filter_private_board(self.request, Board.objects.all())
|
2019-02-22 19:05:49 +08:00
|
|
|
|
|
|
|
|
|
2019-12-05 23:51:31 +08:00
|
|
|
class BoardAutoCompleteViewSet(
|
|
|
|
|
mixins.ListModelMixin,
|
|
|
|
|
viewsets.GenericViewSet,
|
|
|
|
|
):
|
|
|
|
|
serializer_class = api.BoardAutoCompleteSerializer
|
|
|
|
|
filter_backends = (DjangoFilterBackend, OrderingFilter)
|
|
|
|
|
filter_fields = ("submitter__username", )
|
|
|
|
|
ordering_fields = ('-id', )
|
|
|
|
|
ordering = ('-id', )
|
|
|
|
|
pagination_class = None
|
2020-02-11 17:11:39 +08:00
|
|
|
permission_classes = [OwnerOnlyIfPrivate("submitter"), ]
|
2019-12-05 23:51:31 +08:00
|
|
|
|
2020-02-11 16:37:38 +08:00
|
|
|
def get_queryset(self):
|
|
|
|
|
return filter_private_board(self.request, Board.objects.all())
|
|
|
|
|
|
2019-12-05 23:51:31 +08:00
|
|
|
|
2019-12-09 20:27:13 +08:00
|
|
|
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))
|
2019-12-09 20:27:13 +08:00
|
|
|
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()
|
2020-02-11 13:31:55 +08:00
|
|
|
drf_router.register(r'pins', PinViewSet, basename="pin")
|
2019-02-20 18:03:27 +08:00
|
|
|
drf_router.register(r'images', ImageViewSet)
|
2020-02-11 16:37:38 +08:00
|
|
|
drf_router.register(r'boards', BoardViewSet, basename="board")
|
2019-12-10 20:38:01 +08:00
|
|
|
drf_router.register(r'tags-auto-complete', TagAutoCompleteViewSet)
|
2020-02-11 16:37:38 +08:00
|
|
|
drf_router.register(r'boards-auto-complete', BoardAutoCompleteViewSet, base_name="board")
|