se modifica tabla paradero_imagen y corrige filtro
parent
14c39dffa5
commit
c5ba9f2000
|
@ -1,4 +1,5 @@
|
|||
from django.contrib import admin
|
||||
from api import models
|
||||
# from .models import Usuario, Rol, UsuarioRol
|
||||
# from .models import Aplicacion, RolAplicacion
|
||||
# from .models import Persona, TipoTratamientoPersona
|
||||
|
@ -11,3 +12,7 @@ from django.contrib import admin
|
|||
# admin.site.register(Rol)
|
||||
# admin.site.register(RolAplicacion)
|
||||
# admin.site.register(Aplicacion)
|
||||
|
||||
@admin.register(models.ParaderoImagen)
|
||||
class ParaderoImagenAdmin(admin.ModelAdmin):
|
||||
search_fields = ('id_paradero',)
|
|
@ -23,12 +23,13 @@ class ApiMiddleware:
|
|||
return response
|
||||
|
||||
match = resolve(request.path)
|
||||
|
||||
logging.error(match)
|
||||
# se omite esta regla al mostrar imagen de paradero
|
||||
if match.url_name == 'paradero-image' and request.method == 'GET':
|
||||
if match.url_name == 'paradero_imagen-detail' and request.method == 'GET':
|
||||
response = self.get_response(request)
|
||||
return response
|
||||
|
||||
|
||||
if not request.headers.get('Authorization'):
|
||||
return HttpResponse('Debe indicar el token de autorización', status = 400)
|
||||
|
||||
|
|
|
@ -208,9 +208,10 @@ class Paradero(models.Model):
|
|||
|
||||
|
||||
class ParaderoImagen(models.Model):
|
||||
id_paradero = models.OneToOneField(Paradero, models.DO_NOTHING, db_column='id_paradero', primary_key=True)
|
||||
imagen = models.BinaryField(blank=True, null=True)
|
||||
content_type = models.CharField(max_length=50, blank=True, null=True)
|
||||
id_paradero_imagen = models.AutoField(primary_key=True)
|
||||
id_paradero = models.ForeignKey(Paradero, models.DO_NOTHING, db_column='id_paradero', blank=False, null=False)
|
||||
imagen = models.BinaryField(blank=False, null=False)
|
||||
content_type = models.CharField(max_length=50, blank=False, null=False)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
|
|
@ -54,6 +54,19 @@ class ParaderoSerializer(serializers.ModelSerializer):
|
|||
model = models.Paradero
|
||||
fields = '__all__'
|
||||
|
||||
class ParaderoImagenSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.ParaderoImagen
|
||||
fields = '__all__'
|
||||
|
||||
def to_representation(self, instance):
|
||||
representation = super().to_representation(instance)
|
||||
del representation['imagen']
|
||||
request = self.context.get('request')
|
||||
representation['url'] = request.build_absolute_uri(f'/api/paraderos-image/{instance.id_paradero_imagen}/')
|
||||
return representation
|
||||
|
||||
|
||||
class OperadorSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Operador
|
||||
|
|
|
@ -3,6 +3,7 @@ from rest_framework import routers
|
|||
# from api import views
|
||||
from api.views import usuario, auth, aplicacion, tipo, persona, comuna, region, paradero, rol, rolaplicacion
|
||||
from api.views import mapa, linea, operador
|
||||
from api.views import paradero_imagen
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('aplicaciones', aplicacion.AplicacionViewSet)
|
||||
|
@ -16,6 +17,7 @@ router.register('tipos/vehiculo', tipo.TipoVehiculoViewSet)
|
|||
router.register('comunas', comuna.ComunaViewSet)
|
||||
router.register('regiones', region.RegionViewSet)
|
||||
router.register('paraderos', paradero.ParaderoViewSet)
|
||||
router.register('paraderos-image', paradero_imagen.ParaderoImagenListView, basename='paradero_imagen')
|
||||
router.register('lineas', linea.LineaViewSet)
|
||||
router.register('operadores', operador.OperadorViewSet)
|
||||
router.register('roles', rol.RolViewSet)
|
||||
|
@ -26,5 +28,6 @@ urlpatterns = [
|
|||
path('auth/', auth.jwt_login, name='auth'),
|
||||
path('mapas/paraderos/', mapa.paraderos, name='mapa-paraderos'),
|
||||
path('mapas/rutas/', mapa.rutas, name='mapa-rutas'),
|
||||
path('paraderos/image/<int:id>/', paradero.image, name='paradero-image')
|
||||
# path('paraderos/image/', paradero.image, name='paradero-image-list'),
|
||||
# path('paraderos/image/<int:id>/', paradero.image_one, name='paradero-image-one'),
|
||||
]
|
|
@ -7,7 +7,6 @@ from django.db.models.functions import Coalesce
|
|||
|
||||
from ..models import Paradero, ParaderoImagen
|
||||
from ..models import Linea, GtfsShape, GtfsTrips
|
||||
from .paradero import url_image_paradero
|
||||
from logging import error
|
||||
|
||||
google_api_key = 'AIzaSyDnFO9w_SsodjBuY5tOK8-kQJns_l5klQ4'
|
||||
|
@ -22,7 +21,6 @@ def paraderos(request):
|
|||
|
||||
paraderos = Paradero.objects.all()
|
||||
for p in paraderos:
|
||||
url_image = url_image_paradero(request, p.id_paradero)
|
||||
|
||||
marks.append({
|
||||
'position': { 'lat': p.stop_lat, 'lng': p.stop_lon },
|
||||
|
@ -31,7 +29,6 @@ def paraderos(request):
|
|||
'location': p.stop_name,
|
||||
'id_comuna': p.id_comuna,
|
||||
'id_tipo_paradero': p.id_tipo_paradero,
|
||||
'url_image': url_image
|
||||
})
|
||||
|
||||
return JsonResponse({
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
from rest_framework import viewsets
|
||||
from rest_framework import viewsets, filters
|
||||
from rest_framework.decorators import action, schema, api_view
|
||||
from rest_framework.parsers import MultiPartParser
|
||||
from rest_framework.generics import ListAPIView
|
||||
from django.http import JsonResponse, HttpResponse
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
|
||||
from .. import models, serializers
|
||||
from ..schemas import ParaderoImageSchema
|
||||
|
@ -14,48 +16,36 @@ class ParaderoViewSet(viewsets.ModelViewSet):
|
|||
queryset = models.Paradero.objects.all()
|
||||
serializer_class = serializers.ParaderoSerializer
|
||||
|
||||
# class ParaderoImagenListView(ListAPIView):
|
||||
# queryset = models.ParaderoImagen.objects.all()
|
||||
# serializer_class = serializers.ParaderoImagenSerializer
|
||||
# filter_backends = [filters.SearchFilter]
|
||||
# search_fields = ['id_paradero']
|
||||
|
||||
@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)
|
||||
|
||||
|
||||
"""
|
||||
def retrieve(self, request, pk):
|
||||
data = models.ParaderoImagen.objects.filter(id_paradero_imagen = pk).first()
|
||||
response = HttpResponse(content_type=data.content_type)
|
||||
response['Content-Disposition'] = 'inline'
|
||||
response.write(data.imagen)
|
||||
return response
|
||||
|
||||
if request.method == 'POST':
|
||||
paradero = models.Paradero.objects.filter(id_paradero = id).first()
|
||||
def create(self, request, pk = None):
|
||||
imagen = request.FILES['imagen']
|
||||
id_paradero = request.data.get('id_paradero')
|
||||
content_type = imagen.content_type
|
||||
imagen_bytea = imagen.read()
|
||||
|
||||
paradero_imagen = models.ParaderoImagen.objects.filter(id_paradero = id).first()
|
||||
if not paradero_imagen:
|
||||
paradero = models.Paradero.objects.filter(id_paradero = id_paradero).first()
|
||||
|
||||
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}/')
|
||||
return JsonResponse({ 'ok': True })
|
||||
"""
|
|
@ -0,0 +1,18 @@
|
|||
from rest_framework import generics, viewsets
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from django.http import HttpResponse
|
||||
from api.models import ParaderoImagen
|
||||
from api.serializers import ParaderoImagenSerializer
|
||||
|
||||
class ParaderoImagenListView(generics.ListAPIView, viewsets.ModelViewSet):
|
||||
queryset = ParaderoImagen.objects.all()
|
||||
serializer_class = ParaderoImagenSerializer
|
||||
filter_backends = [DjangoFilterBackend]
|
||||
filterset_fields = ['id_paradero', 'content_type']
|
||||
|
||||
def retrieve(self, request, pk):
|
||||
data = ParaderoImagen.objects.filter(id_paradero_imagen = pk).first()
|
||||
response = HttpResponse(content_type=data.content_type)
|
||||
response['Content-Disposition'] = 'inline'
|
||||
response.write(data.imagen)
|
||||
return response
|
Binary file not shown.
Before Width: | Height: | Size: 8.1 KiB |
File diff suppressed because one or more lines are too long
|
@ -4,7 +4,7 @@
|
|||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>...</title>
|
||||
<script type="module" crossorigin src="/assets/index-4e307889.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-d0529d6c.js"></script>
|
||||
<link rel="stylesheet" href="/assets/index-2d1bb0fd.css">
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
@ -41,6 +41,7 @@ INSTALLED_APPS = [
|
|||
'rest_framework',
|
||||
'coreapi',
|
||||
'corsheaders',
|
||||
'django_filters',
|
||||
'api',
|
||||
]
|
||||
|
||||
|
@ -139,7 +140,7 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|||
REST_FRAMEWORK = {
|
||||
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
|
||||
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
|
||||
'DEFAULT_FILTER_BACKENDS': ['rest_framework.filters.OrderingFilter'],
|
||||
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend', 'rest_framework.filters.OrderingFilter'],
|
||||
}
|
||||
CORS_ORIGIN_ALLOW_ALL = False
|
||||
CORS_ORIGIN_WHITELIST = [
|
||||
|
|
|
@ -15,7 +15,7 @@ Including another URLconf
|
|||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
|
||||
# from django.contrib import admin
|
||||
from django.contrib import admin
|
||||
from django.urls import path, include
|
||||
from rest_framework.documentation import include_docs_urls
|
||||
from django.conf import settings
|
||||
|
@ -27,7 +27,7 @@ urlpatterns = [
|
|||
path('', frontend, name='home'),
|
||||
|
||||
# BACKEND
|
||||
# path('admin/', admin.site.urls),
|
||||
path('admin/', admin.site.urls),
|
||||
path('api/', include('api.urls')),
|
||||
path('docs/', include_docs_urls(title = 'API Documentation')),
|
||||
]
|
||||
|
|
|
@ -2,6 +2,7 @@ Django
|
|||
psycopg2-binary
|
||||
djangorestframework
|
||||
django-cors-headers
|
||||
django-filter
|
||||
coreapi
|
||||
python-decouple
|
||||
PyJWT
|
||||
|
|
|
@ -19,3 +19,8 @@ Authorization: Bearer {{token}}
|
|||
###
|
||||
GET {{server}}/aplicaciones/?ordering=-id_aplicacion
|
||||
Authorization: Bearer {{token}}
|
||||
|
||||
|
||||
###
|
||||
GET {{server}}/paraderos-image/??id_paradero=42318
|
||||
Authorization: Bearer {{token}}
|
Loading…
Reference in New Issue