Django Rest Framework Router - wie benutzerdefinierte URL- und Ansichtsfunktionen hinzugefügt werden

8

Ich verwende den Standard-Router von Django Rest Framework und versuche, meine Links anzupassen.

Wie richte ich etwas wie folgt ein:

  1. /myModels/dosomething ( und lies es in der API-Root-Ansicht auflisten)
  2. /myModels/addModel?name=abc&address=xyz

    Views.py

    %Vor%

    urls.py

    %Vor%
kengcc 24.10.2015, 06:55
quelle

2 Antworten

10

Lassen Sie mich zeigen, wie ViewSet und router verwendet werden:

Nach defaultrouter muss Ihr Viewset die Ansichten in der Klasse deklarieren .

Ich gebe ein Beispiel über Benutzer-API und führe Sie wie folgt:

%Vor%

Wenn ich das UserViewSet mit basic restful api abgeschlossen habe, registriere ich mich in router :

%Vor%

Also wird mit entsprechenden URLs generiert:

  • list und create sind mit der entsprechenden URL verknüpft: /users
  • retrieve , partial_update und destroy sind mit der entsprechenden URL verknüpft: /users/<email>

Angenommen, Sie müssen mehr benutzerdefinierte URLs hinzufügen, sollten Sie list_route oder detail_route verwenden, um den Viewset zu erweitern:

%Vor%

Also ist die neue Aktion mit der entsprechenden URL:

  • login ist mit der entsprechenden URL verknüpft: /users/login

Ich hoffe, es kann dir helfen.

    
Burger King 24.10.2015 16:03
quelle
6

Sie können einem Standard-Router weitere Endpunkte hinzufügen, indem Sie @detail_route oder @list_route decorators für Ansichten verwenden.

@list_route erstellt einen neuen Endpunkt in /myModel/new-route/ , während @detail_route einen neuen Endpunkt in /myModel/<id-of-model>/new-route/

erstellt

Wenn Sie jedoch die vom Standardrouter bereitgestellten Endpunkte vollständig ersetzen möchten, sollten Sie darüber nachdenken, einen benutzerdefinierten Router zu schreiben.

DRF-Dokumentation hat eine gute Erklärung für benutzerdefinierte Router sowie a Beispiel für einen benutzerdefinierten Router ist dort .

    
iankit 24.10.2015 12:31
quelle