Несколько одинаковых запросов в представлении на основе класса django rest

Недавно я начал использовать представления, основанные на классах, при разработке Django rest API.

Обсуждая это с другом, он поинтересовался: "А что если у меня будет один и тот же тип запроса несколько раз в одном классе?"

Потому что, как указано в остальной документации, я создал post функции для POST запросов и get функции для GET запросов.

Итак, как написать два GET или других типа запросов в рамках одного класса?

Пробовал ранее принятый ответ, не кажется правильным.

Нижеприведенное решение - это то, что должно сработать для вас.

Для нескольких GET-запросов в одном api вам необходимо реализовать Django Viewset и маршрутизаторы.

Я нашел нижеприведенную ссылку хорошо объясненной с примерами: https://testdriven.io/blog/drf-views-part-3/

В REST-фреймворке Django вы можете определить несколько методов запроса (например, GET, POST, PUT, DELETE) в представлении на основе класса, определив соответствующие методы с тем же именем, что и метод запроса. Например, для обработки запроса GET вы можете определить метод get в классе представления. Вот пример представления на основе класса, в котором определены как метод get для обработки запросов GET, так и метод post для обработки запросов POST:

from rest_framework.views import APIView
from rest_framework.response import Response

class MyView(APIView):
    def get(self, request, format=None):
        # Handle the GET request
        data = {"key": "value"}
        return Response(data)

    def post(self, request, format=None):
        # Handle the POST request
        data = {"key": "value"}
        return Response(data)

Вы также можете использовать декоратор @api_view для определения представлений на основе функций, которые могут обрабатывать несколько методов запроса. Например:

from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(["GET", "POST"])
def my_view(request):
    if request.method == "GET":
        # Handle the GET request
        data = {"key": "value"}
        return Response(data)
    elif request.method == "POST":
        # Handle the POST request
        data = {"key": "value"}
        return Response(data)

Обратите внимание, что вы также можете использовать декораторы @list_route и @detail_route для определения дополнительных методов для представления на основе класса, или использовать декоратор @action для определения методов для представления на основе функции, которое может обрабатывать несколько методов запроса.

Вернуться на верх