diff --git a/core/drf_api.py b/core/drf_api.py index 3acc76b..7fb30e8 100644 --- a/core/drf_api.py +++ b/core/drf_api.py @@ -1,11 +1,10 @@ -from rest_framework import serializers, viewsets, routers, mixins -from rest_framework.viewsets import GenericViewSet +from django.conf import settings +from rest_framework import serializers from taggit.models import Tag -from core.models import Image, Pin -from core.permissions import IsOwnerOrReadOnly +from core.models import Image +from core.models import Pin from django_images.models import Thumbnail -from django.conf import settings from users.models import User @@ -19,11 +18,6 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): ) -class UserViewSet(viewsets.ModelViewSet): - queryset = User.objects.all() - serializer_class = UserSerializer - - class ThumbnailSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Thumbnail @@ -62,11 +56,6 @@ class ImageSerializer(serializers.ModelSerializer): return image -class ImageViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, GenericViewSet): - queryset = Image.objects.all() - serializer_class = ImageSerializer - - class TagSerializer(serializers.ModelSerializer): class Meta: model = Tag @@ -121,16 +110,3 @@ class PinSerializer(serializers.HyperlinkedModelSerializer): image = Image.objects.create(image=image_file['image']) instance.image = image return super(PinSerializer, self).update(instance, validated_data) - - -class PinViewSet(viewsets.ModelViewSet): - queryset = Pin.objects.all() - serializer_class = PinSerializer - filter_fields = ('submitter__username',) - permission_classes = [IsOwnerOrReadOnly("submitter"), ] - - -drf_router = routers.DefaultRouter() -drf_router.register(r'users', UserViewSet) -drf_router.register(r'pins', PinViewSet) -drf_router.register(r'images', ImageViewSet) diff --git a/core/urls.py b/core/urls.py index 49ef287..d3f7ea4 100644 --- a/core/urls.py +++ b/core/urls.py @@ -3,10 +3,7 @@ from django.views.generic import TemplateView from tastypie.api import Api -from core.drf_api import drf_router from .api import ImageResource, ThumbnailResource, PinResource, UserResource -from .views import CreateImage - v1_api = Api(api_name='v1') v1_api.register(ImageResource()) @@ -19,7 +16,6 @@ urlpatterns = [ url(r'^pins/pin-form/$', TemplateView.as_view(template_name='core/pin_form.html'), name='pin-form'), - url(r'^pins/create-image/$', CreateImage.as_view(), name='create-image'), url(r'^pins/tag/(?P(\w|-)+)/$', TemplateView.as_view(template_name='core/pins.html'), name='tag-pins'), diff --git a/core/views.py b/core/views.py index 1684c6b..cd3f123 100644 --- a/core/views.py +++ b/core/views.py @@ -1,34 +1,30 @@ -from django.http import HttpResponseRedirect -from django.conf import settings -from django.core.urlresolvers import reverse -from django.views.generic import CreateView -from django_images.models import Image +from rest_framework import viewsets, mixins, routers +from rest_framework.viewsets import GenericViewSet -from braces.views import JSONResponseMixin, LoginRequiredMixin -from django_images.models import Thumbnail - -from .forms import ImageForm +from core import drf_api as api +from core.models import Image, Pin +from core.permissions import IsOwnerOrReadOnly +from users.models import User -class CreateImage(JSONResponseMixin, LoginRequiredMixin, CreateView): - template_name = None # JavaScript-only view - model = Image - form_class = ImageForm +class UserViewSet(viewsets.ModelViewSet): + queryset = User.objects.all() + serializer_class = api.UserSerializer - def get(self, request, *args, **kwargs): - if not request.is_ajax(): - return HttpResponseRedirect(reverse('core:recent-pins')) - return super(CreateImage, self).get(request, *args, **kwargs) - def form_valid(self, form): - image = form.save() - for size in settings.IMAGE_SIZES: - Thumbnail.objects.get_or_create_at_size(image.pk, size) - return self.render_json_response({ - 'success': { - 'id': image.id - } - }) +class ImageViewSet(mixins.CreateModelMixin, GenericViewSet): + queryset = Image.objects.all() + serializer_class = api.ImageSerializer - def form_invalid(self, form): - return self.render_json_response({'error': form.errors}) + +class PinViewSet(viewsets.ModelViewSet): + queryset = Pin.objects.all() + serializer_class = api.PinSerializer + filter_fields = ('submitter__username',) + permission_classes = [IsOwnerOrReadOnly("submitter"), ] + + +drf_router = routers.DefaultRouter() +drf_router.register(r'users', UserViewSet) +drf_router.register(r'pins', PinViewSet) +drf_router.register(r'images', ImageViewSet) diff --git a/pinry/urls.py b/pinry/urls.py index d3954ea..1fedab3 100644 --- a/pinry/urls.py +++ b/pinry/urls.py @@ -5,7 +5,7 @@ from django.contrib import admin from django.views.static import serve from rest_framework.documentation import include_docs_urls -from core.drf_api import drf_router +from core.views import drf_router admin.autodiscover()