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