This repository has been archived on 2026-10-10. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

100 lines
3.1 KiB
Python

from django.http import HttpResponseServerError
from rest_framework.viewsets import ViewSet
from rest_framework.response import Response
from rest_framework import serializers, status
from smugfolioapi.models import Images, Smug_Users
import uuid
import base64
from django.core.files.base import ContentFile
class ImageView(ViewSet):
"""SmugFolio images s view"""
def retrieve(self, request, pk):
"""Handle GET requests for single images
Returns:
Response -- JSON serialized images
"""
try:
images = Images.objects.get(pk=pk)
serializer = ImagesSerializer(images)
return Response(serializer.data)
except Images.DoesNotExist as ex:
return Response({'message': ex.args[0]}, status=status.HTTP_404_NOT_FOUND)
def list(self, request):
"""Handle GET requests to get all images
Returns:
Response -- JSON serialized list of images
"""
images_ = request.query_params.get('type', None)
images = Images.objects.all()
if images_ is not None:
images = images.filter(images_type_id=images_)
serializer = ImagesSerializer(images, many=True)
return Response(serializer.data)
def create(self, request):
"""Handle POST operations
Returns
Response -- JSON serialized images instance
"""
# object must be retrived when using a foreign key
file_name = request.query_params.get('file_name', None)
format, imgstr = request.data['picture'].split(';base64,')
ext = format.split('/')[-1]
data = ContentFile(base64.b64decode(imgstr), name=f'{file_name}-{uuid.uuid4()}.{ext}')
smug_user = Smug_Users.objects.get(user=request.auth.user)
images = Images.objects.create(
album_id=request.data["album_id"],
picture= data,
smug_user= smug_user,
)
serializer = ImagesSerializer(images)
return Response(serializer.data, status=201)
def update(self, request, pk):
"""Handle PUT requests for a images
Returns:
Response -- Empty body with 204 status code
"""
# Refactor keys to match ERD
images = Images.objects.get(pk=pk)
images.image_tags.set(request.data["image_tags"])
return Response(None, status=status.HTTP_204_NO_CONTENT)
def destroy(self, request, pk):
"""Handle DELETE requests for a images
Args:
request (object): DELETE request object
pk (num): Accepts the argument of the primary key of a images
Returns:
Status: If the method completes successfully, return a HTTP response 204
"""
images = Images.objects.get(pk=pk)
images.delete()
return Response(None, status=status.HTTP_204_NO_CONTENT)
class ImagesSerializer(serializers.ModelSerializer):
"""JSON serializer for images s
"""
class Meta:
model = Images
fields = ('id', 'album_id', 'smug_user_id', 'upload_date', 'picture')
depth = 2