Как сделать так, чтобы RetrieveUpdateDestroyAPIView поддерживал POST?

Я успешно реализовал Rest API для хранения сопоставления IP-адресов и Mac-адресов.

Поддерживаются методы GET/PATCH/DELETE, например:

curl -X GET -H 'Content-Type: application/json' -d '{"ip_address": "192.168.1.1"}'  http://127.0.0.1:8000/api/ipmac/
curl -X PATCH -H 'Content-Type: application/json' -d '{"ip_address": "192.168.1.1", "mac_address": "aa:bb:cc:dd:ee:ff"}'  http://127.0.0.1:8000/api/ipmac/

Однако POST не поддерживается в RetrieveUpdateDestroyAPIView. Я не хочу создавать еще одну конечную точку для метода POST. Как иметь только одну конечную точку и поддерживать все методы?

Вот мой код: models.py

from django.db import models

class IPMacMapping(models.Model):
    ip_address = models.GenericIPAddressField(unique=True)
    mac_address = models.CharField(max_length=17, unique=True)
    created_at = models.DateTimeField(auto_now_add=True)

serializers.py

from rest_framework import serializers
from .models import IPMacMapping

class IPMacMappingSerializer(serializers.ModelSerializer):
    class Meta:
        model = IPMacMapping
        fields = '__all__'

urls.py

from django.urls import path
from .views import IPMacMappingRetrieveUpdateDestroy

urlpatterns = [
    path('ipmac/', IPMacMappingRetrieveUpdateDestroy.as_view(), name='ipmac-list-create')
]

Просмотров:

from rest_framework import generics
from .models import IPMacMapping
from .serializers import IPMacMappingSerializer
from django.shortcuts import get_object_or_404

class IPMacMappingRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):
    queryset = IPMacMapping.objects.all()
    serializer_class = IPMacMappingSerializer
    lookup_url_kwarg = "ip_address"

    def get_object(self):
        result = get_object_or_404(IPMacMapping, ip_address=self.request.data["ip_address"])
        return result
Вернуться на верх