Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
3 changes: 3 additions & 0 deletions imagersite/imager_api/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
5 changes: 5 additions & 0 deletions imagersite/imager_api/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class ImagerApiConfig(AppConfig):
name = 'imager_api'
Empty file.
3 changes: 3 additions & 0 deletions imagersite/imager_api/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.db import models

# Create your models here.
11 changes: 11 additions & 0 deletions imagersite/imager_api/permissions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""Permissions file."""
from rest_framework import permissions


class IsOwnerAndReadOnly(permissions.BasePermission):
"""Allow only users to see their photos."""

def has_object_permission(self, request, view, obj):
"""Allow only GET requests from logged in user."""
return request.method in permissions.SAFE_METHODS and obj.owner == request.user

28 changes: 28 additions & 0 deletions imagersite/imager_api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
"""Serializers file."""
from rest_framework import serializers
from imager_images.models import Photo, Album


class PhotoSerializer(serializers.HyperlinkedModelSerializer):
"""Serializer for Photo model."""

user = serializers.ReadOnlyField(source='user.username')
img_file = serializers.FileField(use_url=True)

class Meta:
"""Meta for Photo Serializer."""

model = Photo
fields = ['user', 'title', 'description', 'published', 'img_file']


class AlbumSerializer(serializers.HyperlinkedModelSerializer):
"""Serializer for Album model."""

user = serializers.ReadOnlyField(source='user.username')

class Meta:
"""Meta for Alubm model."""

model = Album
fields = ['user', 'title', 'published', 'description']
3 changes: 3 additions & 0 deletions imagersite/imager_api/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
34 changes: 34 additions & 0 deletions imagersite/imager_api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from django.shortcuts import render
from rest_framework import renderers
from imager_images.models import Photo, Album
from rest_framework import viewsets
from .permissions import IsOwnerAndReadOnly
from .serializers import PhotoSerializer, AlbumSerializer
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import ListAPIView
from rest_framework.decorators import detail_route
from rest_framework.response import Response


class PhotoViewSet(viewsets.ReadOnlyModelViewSet):
"""View all current users photos."""

queryset = Photo.objects.all()
serializer_class = PhotoSerializer
permission_classes = (IsAuthenticated, IsOwnerAndReadOnly)

def list_photos(self, request, *args, **kwargs):
"""List all photos."""
self.queryset = self.queryset.filter(user=self.request.user)
return self.queryset


class AlbumViewSet(viewsets.ReadOnlyModelViewSet):
"""View all current users albums."""

queryset = Album.objects.all()
serializer_class = AlbumSerializer
permission_classes = (IsAuthenticated, IsOwnerAndReadOnly)



4 changes: 3 additions & 1 deletion imagersite/imagersite/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
SECRET_KEY = os.environ.get('SECRET_KEY', 'nfijha')

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
DEBUG = True

ALLOWED_HOSTS = ['localhost', '.us-west-2.compute.amazonaws.com']

Expand All @@ -38,6 +38,7 @@
# Application definition

INSTALLED_APPS = [
'imager_api.apps.ImagerApiConfig',
'imager_profile.apps.ImagerProfileConfig',
'imager_images.apps.ImagerImagesConfig',
'sorl.thumbnail',
Expand All @@ -47,6 +48,7 @@
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework'
]

MIDDLEWARE_CLASSES = [
Expand Down
7 changes: 7 additions & 0 deletions imagersite/imagersite/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@
from django.conf.urls import include
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from imager_api import views
from .views import home_page
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'photos', views.PhotoViewSet)
router.registr(r'albums', views.AlbumViewSet)

urlpatterns = [
url(r'^admin/', admin.site.urls),
Expand All @@ -13,6 +19,7 @@
url(r'^accounts/', include('registration.backends.hmac.urls')),
url(r'^images/', include('imager_images.urls')),
url(r'^profile/', include('imager_profile.urls')),
url(r'^api/v1/', include(router.urls)),
]

urlpatterns += staticfiles_urlpatterns()
Expand Down