Skip to content

Commit

Permalink
Merge pull request #3 from arthur-wsw/cbv
Browse files Browse the repository at this point in the history
Rewrite views as CBV
  • Loading branch information
paltman committed Feb 22, 2016
2 parents 48768eb + 91d4c29 commit d041993
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 53 deletions.
18 changes: 6 additions & 12 deletions pinax/images/urls.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
from django.conf.urls import url

from .views import (
images,
images_upload,
images_delete,
images_make_primary
)

from . import views

urlpatterns = [
url(r"^sets/new/upload/$", images_upload, name="images_set_new_upload"),
url(r"^sets/(?P<pk>\d+)/upload/$", images_upload, name="images_set_upload"),
url(r"^sets/(?P<pk>\d+)/$", images, name="images"),
url(r"^(?P<pk>\d+)/delete/$", images_delete, name="images_delete"),
url(r"^(?P<pk>\d+)/make-primary/$", images_make_primary, name="images_make_primary"),
url(r"^sets/new/upload/$", views.ImageUploadView.as_view(), name="images_set_new_upload"),
url(r"^sets/(?P<pk>\d+)/upload/$", views.ImageUploadView.as_view(), name="images_set_upload"),
url(r"^sets/(?P<pk>\d+)/$", views.ImagesView.as_view(), name="images"),
url(r"^(?P<pk>\d+)/delete/$", views.ImageDeleteView.as_view(), name="images_delete"),
url(r"^(?P<pk>\d+)/make-primary/$", views.ImageMakePrimaryView.as_view(), name="images_make_primary"),
]
98 changes: 57 additions & 41 deletions pinax/images/views.py
Original file line number Diff line number Diff line change
@@ -1,43 +1,59 @@
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_POST

from account.decorators import login_required


@login_required
def images(request, pk):
image_set = get_object_or_404(request.user.image_sets.all(), pk=pk)
return JsonResponse(image_set.image_data())


@require_POST
@login_required
def images_delete(request, pk):
image = get_object_or_404(request.user.images.all(), pk=pk)
image.delete()
return JsonResponse(image.image_set.image_data())


@require_POST
@login_required
def images_make_primary(request, pk):
image = get_object_or_404(request.user.images.all(), pk=pk)
image.toggle_primary()
return JsonResponse(image.image_set.image_data())


@require_POST
@login_required
def images_upload(request, pk=None):
if pk is None:
image_set = request.user.image_sets.create()
else:
image_set = get_object_or_404(request.user.image_sets.all(), pk=pk)
for fp in request.FILES.getlist("files"):
image_set.images.create(
image=fp,
original_filename=fp.name,
created_by=request.user
)
return JsonResponse(image_set.image_data())
from django.views.generic import View
from django.views.generic.detail import SingleObjectMixin

from pinax.images.models import Image

try:
from account.mixins import LoginRequiredMixin
except ImportError:
from django.contrib.auth.mixins import LoginRequiredMixin


class ImagesView(LoginRequiredMixin, SingleObjectMixin, View):

def get_object(self, queryset=None):
return get_object_or_404(self.request.user.image_sets.all(), pk=self.kwargs.get(self.pk_url_kwarg))

def get(self, request, *args, **kwargs):
self.object = self.get_object()
return JsonResponse(self.object.image_data())


class ImageDeleteView(LoginRequiredMixin, SingleObjectMixin, View):
model = Image

def post(self, request, *args, **kwargs):
self.object = self.get_object()
self.object.delete()
return JsonResponse(self.object.image_set.image_data())


class ImageMakePrimaryView(LoginRequiredMixin, SingleObjectMixin, View):
model = Image

def post(self, request, *args, **kwargs):
self.object = self.get_object()
self.object.toggle_primary()
return JsonResponse(self.object.image_set.image_data())


class ImageUploadView(LoginRequiredMixin, View):
image_set = None

def get_image_set(self):
image_set_pk = self.kwargs.get("pk", None)
if image_set_pk is None:
return self.request.user.image_sets.create()
return get_object_or_404(self.request.user.image_sets.all(), pk=image_set_pk)

def post(self, request, *args, **kwargs):
self.image_set = self.get_image_set()
for file in request.FILES.getlist("files"):
self.image_set.images.create(
image=file,
original_filename=file.name,
created_by=request.user
)
return JsonResponse(self.image_set.image_data())

0 comments on commit d041993

Please sign in to comment.