Django-rest-framework: caractère point exclu de la configuration de l'url lookup_field de l'ensemble de vues

Créé le 6 nov. 2014  ·  4Commentaires  ·  Source: encode/django-rest-framework

Quelque part entre djangorestframework==2.3.13 et djangorestframework==2.4.4 la configuration d'URL générée pour un ModelViewSet a changé pour exclure '.' caractère (point / point). Cela signifie que votre champ de recherche personnalisé ne peut pas être un nom de domaine ou une autre chaîne qui inclut ce caractère.

Étant donné un ensemble de vues tel que :

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

Les URL suivantes sont générées ( 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']

Et maintenant avec djangorestframework==2.4.4 :

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

Le [^] spécifie un ensemble d'exclusion, donc [^/] exclut toutes les barres obliques, tandis que [^/.] exclut les barres obliques et les points (point).

Je crois qu'il n'y a aucune raison de restreindre les périodes dans les URI et ce changement devrait être annulé.

Commentaire le plus utile

Et voici le commit qui a cassé cette fonctionnalité précédente https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. Le journal de validation montre que vous êtes au courant du problème. Je suppose que vous n'avez pas l'intention de le changer, alors je vais clore ce sujet.

Quiconque trouve cela, sachez que pour autoriser des périodes dans l'urlconf généré par le routeur par défaut, vous devez ajouter lookup_value_regex = '[^/]+' à votre ensemble de vues.

Tous les 4 commentaires

Et voici le commit qui a cassé cette fonctionnalité précédente https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. Le journal de validation montre que vous êtes au courant du problème. Je suppose que vous n'avez pas l'intention de le changer, alors je vais clore ce sujet.

Quiconque trouve cela, sachez que pour autoriser des périodes dans l'urlconf généré par le routeur par défaut, vous devez ajouter lookup_value_regex = '[^/]+' à votre ensemble de vues.

Je me demande pourquoi point a été exclu en premier lieu...

Les points Iirc interfèrent avec la possibilité d'ajouter un type de contenu d'extension dans les URL - c'est-à-dire /myendpoint.json

Et voici le commit qui a cassé cette fonctionnalité précédente 3cd15fb . Le journal de validation montre que vous êtes au courant du problème. Je suppose que vous n'avez pas l'intention de le changer, alors je vais clore ce sujet.

Quiconque trouve cela, sachez que pour autoriser des périodes dans l'urlconf généré par le routeur par défaut, vous devez ajouter lookup_value_regex = '[^/]+' à votre ensemble de vues.

Merci beaucoup!

Cette page vous a été utile?
0 / 5 - 0 notes