2016-06-06 9 views
4

Ich habe eine sehr grundlegende Frage über DjangoREST und Routern.Wie benutzt man Router in Django REST nicht für Viewsets, aber für generische Views?

Wenn ich brauche rest_framework.viewsets zu erfolgter Anmeldung Ich mag dieses (Beispiel aus documentaton) tue some:

router = routers.SimpleRouter() 
router.register(r'users', UserViewSet) 
router.register(r'accounts', AccountViewSet) 

Aber wie man hinzufügen Blick auf Router, der aus rest_framework.generics Paket sind? Sollte ich benutzerdefinierte Router erstellen (http://www.django-rest-framework.org/api-guide/routers/#custom-routers)? Was ist die beste Praxis?

+0

Noch Urlmuster sind die besten. Frage ist mir durch Überdenken aufgefallen: P – pmoniq

Antwort

2

Aber wie zu Routeransichten hinzufügen, die aus rest_framework.generics Paket sind?

Sie nicht. ViewSets fügt ein paar Kompatibilitätslayer zu rest_framework.generics hinzu, um mit Routern zu arbeiten.

Sollte ich Custom Router (http://www.django-rest-framework.org/api-guide/routers/#custom-routers) erstellen? Was ist die beste Praxis?

Wenn Sie eine nicht sichtbare Ansicht verwenden möchten, müssen Sie die normale Django-URL schreiben.

Mein Gefühl ist die echte Frage ist ganz anders und würde etwas wie "Wie beschränke ich Viewset auf einige Aktionen nur".

In diesem Fall wird die Erklärung des ModelViewSet liefert die Antwort:

class ViewSet(ViewSetMixin, views.APIView): 
    """ 
    The base ViewSet class does not provide any actions by default. 
    """ 
    pass 


class GenericViewSet(ViewSetMixin, generics.GenericAPIView): 
    """ 
    The GenericViewSet class does not provide any actions by default, 
    but does include the base set of generic view behavior, such as 
    the `get_object` and `get_queryset` methods. 
    """ 
    pass 


class ModelViewSet(mixins.CreateModelMixin, 
        mixins.RetrieveModelMixin, 
        mixins.UpdateModelMixin, 
        mixins.DestroyModelMixin, 
        mixins.ListModelMixin, 
        GenericViewSet): 
    """ 
    A viewset that provides default `create()`, `retrieve()`, `update()`, 
    `partial_update()`, `destroy()` and `list()` actions. 
    """ 
    pass 

Wie Sie sehen können, können Sie die ModelViewSet spezialisieren, indem sie die erforderlichen Mixins Auswahl und Erben von GenericViewSet.

+0

Leider geht Ihre Antwort davon aus, dass Sie mit Modellen arbeiten, was nicht immer der Fall ist. Nur weil Sie eine Ansicht haben, die sich nicht in einem Ansichtssatz befindet, bedeutet dies nicht, dass die Ansicht ein Modell verwendet, um das gerenderte Ergebnis zu erzeugen. – Sensei

+0

Ob es Modelle verwendet oder nicht, ist hier nicht relevant. Sie können ViewSets ohne Modelle verwenden, Router funktionieren jedoch nur mit ViewSets. – Linovia

Verwandte Themen