ViewSets
über automatische Methoden zum Auflisten, Abrufen, Erstellen, Aktualisieren, Löschen, ...
Ich möchte einige davon deaktivieren, und die Lösung, die ich gefunden habe, ist wahrscheinlich keine gute, da diese OPTIONS
immer noch als zulässig angegeben werden.
Irgendeine Idee, wie man das richtig macht?
class SampleViewSet(viewsets.ModelViewSet):
queryset = api_models.Sample.objects.all()
serializer_class = api_serializers.SampleSerializer
def list(self, request):
return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def create(self, request):
return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
UpdateModelMixin
. Wenn Sie das Update verwenden möchten, aber nicht den Patch, kann ich mir derzeit zwei Möglichkeiten vorstellen. Sie können entweder die zulässigen Methoden in der Ansicht überschreiben und "Patch" entfernen oder diepartial_update
Methode und den Aufruf überschreibenhttp_method_not_allowed(request, *args, **kwargs)
. Ich habe dies nicht getestet, daher bin ich mir nicht sicher, ob es funktioniertclass SampleViewSet(viewsets.ReadOnlyModelViewSet)
.Sie können Ihr ViewSet weiterhin verwenden
viewsets.ModelViewSet
und definierenhttp_method_names
.Beispiel
Sobald Sie hinzufügen
http_method_names
, werden Sie nicht mehr in der Lage seinput
undpatch
.Wenn Sie wollen,
put
aber nicht wollenpatch
, können Sie behaltenhttp_method_names = ['get', 'post', 'head', 'put']
Intern erstrecken sich DRF-Ansichten von Django CBV. Django CBV hat ein Attribut namens http_method_names. Sie können also auch http_method_names mit DRF-Ansichten verwenden.
[Shameless Plug]: Wenn diese Antwort hilfreich war, wird Ihnen meine Reihe von Beiträgen zu DRF unter https://www.agiliq.com/blog/2019/04/drf-polls/ gefallen .
quelle
python3
undDjango 1.10
gut.mixins.UpdateModelMixin
Obwohl es eine Weile her ist, dass dieser Beitrag veröffentlicht wurde, habe ich plötzlich herausgefunden, dass es tatsächlich eine Möglichkeit gibt, diese Funktion zu deaktivieren. Sie können sie direkt in views.py bearbeiten.
Quelle: https://www.django-rest-framework.org/api-guide/viewsets/#viewset-actions
quelle
Wenn Sie versuchen, die PUT-Methode in einem DRF-Ansichtssatz zu deaktivieren, können Sie einen benutzerdefinierten Router erstellen:
Wenn Sie die Methode am Router deaktivieren, ist die Dokumentation Ihres API-Schemas korrekt.
quelle
So deaktivieren Sie die Methode "DELETE" für ViewSet in DRF
PS Dies ist zuverlässiger als die explizite Angabe aller erforderlichen Methoden, sodass die Wahrscheinlichkeit geringer ist, dass einige wichtige Methoden vergessen werden. OPTIONEN, KOPF usw.
PPS hat standardmäßig DRF
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
quelle
super
auf Klassenebene anrufen , es gibt keineself
.In Django Rest Framework 3.xx können Sie einfach jede Methode aktivieren, für die Sie aktiviert werden möchten
ModelViewSet
, indem Sie ein Wörterbuch an dieas_view
Methode übergeben. In diesem Wörterbuch muss der Schlüssel den Anforderungstyp (GET, POST, DELETE usw.) und der Wert den entsprechenden Methodennamen (Liste, Abrufen, Aktualisieren usw.) enthalten. Angenommen, Sie möchten, dass einSample
Modell erstellt oder gelesen wird, aber nicht, dass es geändert wird. Also es heißt , Sie wollenlist
,retrieve
undcreate
Verfahren zu ermöglichen (und Sie andere wollen deaktiviert sein.)Alles, was Sie tun müssen, ist, Pfade hinzuzufügen, um
urlpatterns
diese zu mögen:Wie Sie sehen können, gibt es in den obigen Routing-Einstellungen keine
delete
und keineput
Anfrage. Wenn Sie beispielsweise eineput
Anfrage an die URL senden , erhalten Sie eine Antwort mit 405Method Not Allowed
:quelle
Wenn Sie Put / Post / Destroy-Methoden deaktivieren möchten, können Sie diese verwenden
quelle