Im Wesentlichen versuche ich eine gute Möglichkeit zu finden, weitere Ansichten an einen Router anzuhängen, ohne einen benutzerdefinierten Router zu erstellen. Was ist ein guter Weg, dies zu erreichen?Hinzufügen weiterer Ansichten zu einem Router oder Viewset (Django-Rest-Framework)
Hier ist etwas, das dem entspricht, was ich zu erreichen versuche. Variablennamen wurden geändert und die Beispielmethode, die ich einführen möchte, ist für diese Frage extrem vereinfacht.
Router:
router = routers.SimpleRouter(trailing_slash=False)
router.register(r'myobjects', MyObjectViewSet, base_name='myobjects')
urlpatterns = router.urls
Viewset
class MyObjectsViewSet(viewsets.ViewSet):
""" Provides API Methods to manage MyObjects. """
def list(self, request):
""" Returns a list of MyObjects. """
data = get_list_of_myobjects()
return Response(data)
def retrieve(self, request, pk):
""" Returns a single MyObject. """
data = fetch_my_object(pk)
return Response(data)
def destroy(self, request, pk):
""" Deletes a single MyObject. """
fetch_my_object_and_delete(pk)
return Response()
Ein Beispiel eines anderen Verfahrens Typ I umfassen müssen. (Es gibt viele davon):
def get_locations(self, request):
""" Returns a list of location objects somehow related to MyObject """
locations = calculate_something()
return Response(locations)
Das Endergebnis ist, dass die folgende URL korrekt funktionieren und "sauber" implementiert werden würde.
GET example.com/myobjects/123/locations
Ich versuche, eine Datei auf eine benutzerdefinierte Methode hochzuladen. Weißt du, wie ich das erreichen kann? – psychok7
Ist '@ action' veraltet? Die Verknüpfung schlägt Methoden als Argumente für den Dekorateur' @ detail_route' vor. – rtindru