Django-rest-framework: Punktzeichen aus Viewset ausgeschlossen lookup_field url conf

Erstellt am 6. Nov. 2014  ·  4Kommentare  ·  Quelle: encode/django-rest-framework

Irgendwo zwischen djangorestframework==2.3.13 und djangorestframework==2.4.4 die generierte URL-Konf für ein ModelViewSet geändert, um '.' (Punkt / Punkt) Zeichen. Das bedeutet, dass Ihr benutzerdefiniertes lookup_field kein Domänenname oder eine andere Zeichenfolge sein kann, die dieses Zeichen enthält.

Gegeben einen Ansichtssatz wie:

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

Die folgenden URLs werden generiert ( 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']

Und jetzt mit djangorestframework==2.4.4 :

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

[^] gibt einen Ausschlusssatz an, also schließt [^/] alle Schrägstriche aus, während [^/.] Schrägstriche und Punkte (Punkt) ausschließt.

Ich glaube, es gibt keinen Grund, Zeiträume in URIs einzuschränken, und diese Änderung sollte rückgängig gemacht werden.

Hilfreichster Kommentar

Und hier ist der Commit, der diese vorherige Funktionalität unterbrach https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. Das Commit-Protokoll zeigt, dass Ihnen das Problem bekannt ist. Ich gehe davon aus, dass Sie nicht die Absicht haben, es zu ändern, daher schließe ich dieses Thema.

Jeder, der dies findet, sollte sich bewusst sein, dass Sie lookup_value_regex = '[^/]+' zu Ihrem Viewset hinzufügen müssen, um Punkte in der vom Standardrouter generierten URLconf zuzulassen.

Alle 4 Kommentare

Und hier ist der Commit, der diese vorherige Funktionalität unterbrach https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. Das Commit-Protokoll zeigt, dass Ihnen das Problem bekannt ist. Ich gehe davon aus, dass Sie nicht die Absicht haben, es zu ändern, daher schließe ich dieses Thema.

Jeder, der dies findet, sollte sich bewusst sein, dass Sie lookup_value_regex = '[^/]+' zu Ihrem Viewset hinzufügen müssen, um Punkte in der vom Standardrouter generierten URLconf zuzulassen.

Ich frage mich, warum Punkt überhaupt ausgeschlossen wurde...

Iirc-Punkte beeinträchtigen die Möglichkeit, den Inhaltstyp der Erweiterung innerhalb von URLs hinzuzufügen - dh /myendpoint.json

Und hier ist der Commit, der diese vorherige Funktionalität zerstört hat 3cd15fb . Das Commit-Protokoll zeigt, dass Ihnen das Problem bekannt ist. Ich gehe davon aus, dass Sie nicht die Absicht haben, es zu ändern, daher schließe ich dieses Thema.

Jeder, der dies findet, sollte sich bewusst sein, dass Sie lookup_value_regex = '[^/]+' zu Ihrem Viewset hinzufügen müssen, um Punkte in der vom Standardrouter generierten URLconf zuzulassen.

Vielen vielen Dank!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen