2015-11-06 2 views
5

Ich kann keine APIView zu meinen URL-Routen registrieren.Django Rest Framework APIView Register Route

-Code von Ansichten:

class PayOrderViewSet(APIView): 
    queryset = PayOrder.objects.all() 

-Code von Urls:

router = routers.DefaultRouter() 
router.register(r'document/payorder', PayOrderViewSet) 

Diese neu geschaffene url gar nicht existieren.

Was ist die Lösung dafür?

+0

hinzufügen Schrägstrich an das Ende der URL in Ihrem Browser und sehen, ob es funktioniert. – Cheng

+0

Immer noch nicht gefunden:/ –

+0

kannst du deine urls.py posten? – Cheng

Antwort

3

Router funktionieren nicht mit APIView. Sie arbeiten nur mit ViewSets und deren Derivaten.

Sie wahrscheinlich wollen:

class PayOrderViewSet(ModelViewSet): 
+0

"Router funktionieren nicht mit APIView" Beliebige Zitate? – nehemiah

+1

Keine Notwendigkeit zu zitieren. 'Router' erwartet API/Daten, die von' Viewset' bereitgestellt werden, aber nicht mit 'APIView' verfügbar sind. – Linovia

5

Router und APIViews (generisch oder auf andere Weise) sind zwei verschiedene Arten API-Endpunkte zu erstellen. Router arbeiten nur mit Viewsets.

In Ihrem Code, obwohl Sie versuchen, ein Viewset für einen Router zu erstellen, erweitert Ihr Code APIView-Klasse.

Ihr Problem wird von dem, was @linovia in seiner Antwort vorgeschlagen hat, berücksichtigt. Ich würde vorschlagen, dass es eine gute Idee ist, den Unterschied zwischen diesen beiden zu verstehen.

GenericViewSet erbt von GenericAPIView, bietet jedoch keine Implementierungen von grundlegenden Aktionen. Nur nur get_object, get_queryset.

ModelViewSet erbt von GenericAPIView und enthält Implementierungen für verschiedene Aktionen. Mit anderen Worten, Sie müssen grundlegende Aktionen nicht als Liste implementieren, abrufen, erstellen, aktualisieren oder zerstören. Natürlich können Sie sie überschreiben und eine eigene Liste oder eigene Erstellungsmethoden implementieren.

Lesen Sie mehr über viewsets und Generic Class Based APIViews:

Verwandte Themen