[PYTHON] Steuern von Anforderungsmethoden im Django-Rest-Framework

Einführung

Ein Memo über die Anforderungsmethoden-Steuermethode beim Erstellen einer API mit dem Django-Rest-Framework

Umgebung

Mac 10.15.5 Python 3.8.1 Django 3.0.7 djangorestframework 3.11.0

Code

Ich habe auf den Code in diesem Artikel verwiesen

Wird von geerbten Klassen gesteuert

Die Berechtigung der Anforderungsmethode wird von der Basisklasse gesteuert, die von der in views.py definierten Klasse geerbt wird. Der viewsets.ModelViewSet-Teil des folgenden Codes. Es wird vom importierten rest_framework vorbereitet.

blog/views.py


import django_filters
from rest_framework import viewsets
from rest_framework import filters

from .models import User
from .models import Entry
from .serializer import UserSerializer
from .serializer import EntrySerializer


class UserViewSet(viewsets.ModelViewSet): # <-Dies
    queryset = User.objects.all()
    serializer_class = UserSerializer


class EntryViewSet(viewsets.ModelViewSet): # <-Dies
    queryset = Entry.objects.all()
    serializer_class = EntrySerializer
    filter_fields = ('author', 'status')

Inhalt von viewsets.ModelViewSet

Es wird in einer Datei namens viewssets.py in rest_framework definiert. Wenn Sie von ModelViewSet erben, können Sie GET, POST, PUT und DELETE verwenden. Wenn Sie die geerbte Klasse in ReadOnlyModelViewSet ändern, können Sie nur GET steuern.

GET, POST, PUT, DELETE verfügbar

rest_framework/viewsets.py


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

Nur für GET verfügbar

rest_framework/viewsets.py


class ReadOnlyModelViewSet(mixins.RetrieveModelMixin,
                           mixins.ListModelMixin,
                           GenericViewSet):
    """
    A viewset that provides default `list()` and `retrieve()` actions.
    """
    pass

Angeben von Ressourcen bei Verwendung von PUT und DELETE

Bei Verwendung von PUT oder DELETE muss bis zum Primärschlüssel angegeben werden. /api/users/ -> /api/users/1/

Nicht gut


$ curl -X PUT -d name=yamada -d [email protected] localhost:8000/api/users/

OK


$ curl -X PUT -d name=yamada -d [email protected] localhost:8000/api/users/1/

Dies liegt daran, dass das DjangoRestFramework wissen muss, welche Objekte aktualisiert / gelöscht werden müssen. Es kann in der Listenansicht nicht erkannt werden (/ api / users /). Ich denke, Sie werden einen solchen Fehler bekommen.

{"detail":"Method \"DELETE\" not allowed."}

{"detail":"Methode\"DELETE\"Ist nicht erlaubt."}

Referenz

https://www.django-rest-framework.org/api-guide/viewsets/

https://stackoverflow.com/questions/26711975/django-drf-405-method-not-allowed-on-delete-operation/26714561#26714561

Recommended Posts

Steuern von Anforderungsmethoden im Django-Rest-Framework
HTTP-Anfrage in Python
String-Objektmethoden in Python
In der Liste verfügbare Methoden
Nachdem Sie entschieden haben, wo die Beschriftung abgelegt werden soll, müssen Sie im nächsten Schritt den Anzeigeinhalt, das Anzeigeformat usw. festlegen. Im obigen Beispiel lautet die Position beispielsweise set_xticks ([300.600.900]). Wenn Sie sie jedoch auf dem Display auf klein, mittel oder groß einstellen möchten, setzen Sie set_xticklabels (['klein', 'mittel', 'groß']). Sie können die Neigung des Zeichens mit Drehung festlegen. Wenn es 90 ist, wird es vertikal sein. Die Größe bleibt gleich. Hier möchten wir die Daten von 6/1 bis 6/10 so anzeigen, wie sie sind, also ersetzen wir x0 so wie sie sind. Weitere Anpassung des Anzeigeformats Wenn x0 normal angezeigt wird, werden das ganze Jahr, der Monat, der Tag, die Stunde, die Minute und die Sekunde angezeigt und es ist lang, sodass nur das Jahr, der Monat und der Tag angezeigt werden. Farbe hinzufügen
Rufen Sie Methoden in Python dynamisch auf
Definieren Sie Funktionen (Methoden) in Python dynamisch
Holen Sie sich Boolean mit Flask-Anfrage