Sistema_Gestion_Transporte/project/api/views/paradero.py

61 lines
2.1 KiB
Python

from rest_framework import viewsets
from rest_framework.decorators import action, schema, api_view
from rest_framework.parsers import MultiPartParser
from django.http import JsonResponse, HttpResponse
from .. import models, serializers
from ..schemas import ParaderoImageSchema
from PIL import Image
import io
import coreapi
import logging
class ParaderoViewSet(viewsets.ModelViewSet):
queryset = models.Paradero.objects.all()
serializer_class = serializers.ParaderoSerializer
@action(detail=False, methods=['GET','POST'], parser_classes=[MultiPartParser])
@api_view(['GET','POST'])
@schema(ParaderoImageSchema())
def image(request, id):
if request.method == 'GET':
paradero_imagen = models.ParaderoImagen.objects.filter(id_paradero = id).first()
if not paradero_imagen:
return HttpResponse('')
response = HttpResponse(content_type=paradero_imagen.content_type)
response.write(paradero_imagen.imagen)
return response
if request.method == 'POST':
paradero = models.Paradero.objects.filter(id_paradero = id).first()
imagen = request.FILES['imagen']
content_type = imagen.content_type
imagen_bytea = imagen.read()
paradero_imagen = models.ParaderoImagen.objects.filter(id_paradero = id).first()
if not paradero_imagen:
paradero_imagen = models.ParaderoImagen(
id_paradero = paradero,
imagen = imagen_bytea,
content_type = content_type
)
paradero_imagen.save()
else:
paradero_imagen.imagen = imagen_bytea
paradero_imagen.content_type = content_type
paradero_imagen.save()
return JsonResponse({
'id_paradero': paradero.id_paradero,
'stop_name': paradero.stop_name,
'url_image': url_image_paradero(request, id)
})
def url_image_paradero(request, id):
paradero_imagen = models.ParaderoImagen.objects.filter(id_paradero = id).first()
if not paradero_imagen:
return None
return request.build_absolute_uri(f'/api/paraderos/image/{id}/')