Django-rest-framework: carácter de punto excluido de viewset lookup_field url conf

Creado en 6 nov. 2014  ·  4Comentarios  ·  Fuente: encode/django-rest-framework

En algún lugar entre djangorestframework==2.3.13 y djangorestframework==2.4.4 la configuración de URL generada para un ModelViewSet ha cambiado para excluir '.' carácter (punto / punto). Esto significa que su campo de búsqueda personalizado no puede ser un nombre de dominio o alguna otra cadena que incluya este carácter.

Dado un conjunto de vistas como:

class ZoneViewSet(viewsets.ModelViewSet):
    lookup_field = 'domain__name'

Se generan las siguientes URL ( djangorestframework==2.3.13 ):

^api/ ^v1/ ^zones/(?P<domain__name>[^/]+)/$ [name='zone-detail']
^api/ ^v1/ ^zones/(?P<domain__name>[^/]+)/\.(?P<format>[a-z0-9]+)$ [name='zone-detail']

Y ahora con djangorestframework==2.4.4 :

^api/ ^v1/ ^zones//$ [name='zone-detail']
^api/ ^v1/ ^zones/(?P<domain__name>[^/.]+)/\.(?P<format>[a-z0-9]+)$ [name='zone-detail']

[^] especifica un conjunto de exclusión, por lo que [^/] excluye todas las barras diagonales, mientras que [^/.] excluye barras diagonales y puntos (punto).

Creo que no hay razón para restringir períodos en URI y este cambio debería revertirse.

Comentario más útil

Y aquí está el compromiso que rompió esta funcionalidad anterior https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. El registro de confirmación muestra que está al tanto del problema. Supongo que no tiene la intención de cambiarlo, así que cerraré este problema.

Cualquiera que encuentre esto tenga en cuenta que para permitir períodos en urlconf generados por el enrutador predeterminado, debe agregar lookup_value_regex = '[^/]+' a su conjunto de vistas.

Todos 4 comentarios

Y aquí está el compromiso que rompió esta funcionalidad anterior https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. El registro de confirmación muestra que está al tanto del problema. Supongo que no tiene la intención de cambiarlo, así que cerraré este problema.

Cualquiera que encuentre esto tenga en cuenta que para permitir períodos en urlconf generados por el enrutador predeterminado, debe agregar lookup_value_regex = '[^/]+' a su conjunto de vistas.

Me pregunto por qué se excluyó el punto en primer lugar ...

Los puntos IIRC interfieren con la capacidad de agregar un tipo de contenido de extensión dentro de las URL, es decir, /myendpoint.json

Y aquí está el compromiso que rompió esta funcionalidad anterior 3cd15fb . El registro de confirmación muestra que está al tanto del problema. Supongo que no tiene la intención de cambiarlo, así que cerraré este problema.

Cualquiera que encuentre esto tenga en cuenta que para permitir períodos en urlconf generados por el enrutador predeterminado, debe agregar lookup_value_regex = '[^/]+' a su conjunto de vistas.

¡Muchas muchas gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones