diff --git a/imagersite/imager_api/__init__.py b/imagersite/imager_api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/imagersite/imager_api/admin.py b/imagersite/imager_api/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/imagersite/imager_api/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/imagersite/imager_api/apps.py b/imagersite/imager_api/apps.py new file mode 100644 index 0000000..fb8858a --- /dev/null +++ b/imagersite/imager_api/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ImagerApiConfig(AppConfig): + name = 'imager_api' diff --git a/imagersite/imager_api/migrations/__init__.py b/imagersite/imager_api/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/imagersite/imager_api/models.py b/imagersite/imager_api/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/imagersite/imager_api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/imagersite/imager_api/permissions.py b/imagersite/imager_api/permissions.py new file mode 100644 index 0000000..0c9f2aa --- /dev/null +++ b/imagersite/imager_api/permissions.py @@ -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 + diff --git a/imagersite/imager_api/serializers.py b/imagersite/imager_api/serializers.py new file mode 100644 index 0000000..fb24795 --- /dev/null +++ b/imagersite/imager_api/serializers.py @@ -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'] diff --git a/imagersite/imager_api/tests.py b/imagersite/imager_api/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/imagersite/imager_api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/imagersite/imager_api/views.py b/imagersite/imager_api/views.py new file mode 100644 index 0000000..975d1b0 --- /dev/null +++ b/imagersite/imager_api/views.py @@ -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) + + + diff --git a/imagersite/imagersite/settings.py b/imagersite/imagersite/settings.py index 3e82b7c..b19cdc0 100644 --- a/imagersite/imagersite/settings.py +++ b/imagersite/imagersite/settings.py @@ -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'] @@ -38,6 +38,7 @@ # Application definition INSTALLED_APPS = [ + 'imager_api.apps.ImagerApiConfig', 'imager_profile.apps.ImagerProfileConfig', 'imager_images.apps.ImagerImagesConfig', 'sorl.thumbnail', @@ -47,6 +48,7 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'rest_framework' ] MIDDLEWARE_CLASSES = [ diff --git a/imagersite/imagersite/urls.py b/imagersite/imagersite/urls.py index 7346bcd..6119a72 100644 --- a/imagersite/imagersite/urls.py +++ b/imagersite/imagersite/urls.py @@ -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), @@ -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()