61 lines
2.1 KiB
Python
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}/')
|