Несколько одинаковых запросов в представлении на основе класса 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
для определения методов для представления на основе функции, которое может обрабатывать несколько методов запроса.