, если вы хотите, чтобы ваша конечная точка REST имела все: GET, POST, PUT, DELETE и т. Д. c. функциональности, то вы должны зарегистрировать маршрут в вашем urls.py:
urls.py:
from rest_framework import routers
from django.urls import path, include
from . import views
router = routers.DefaultRouter()
router.register(r'hello', views.HelloWorldViewSet)
urlpatterns = [
# Wire up our API using automatic URL routing.
# rest_framework api routing
path('api/', include(router.urls)),
# This requires login for put/update while allowing get (read-only) for everyone.
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
теперь URL: / hello / указывает на HelloWorldViewSet.
в вашем views.py добавьте HelloWorldViewSet, который будет наследоваться от класса rest_framework.viewsets.ViewSet. Вы можете переопределить поведение класса ViewSet по умолчанию, определив следующие «действия»: list (), create (), retrieve (), update (), part_update (), destroy (). Для отображения "hello world"
на GET
вам нужно только переопределить list()
:
, поэтому в ваших views.py:
from rest_framework import viewsets
from rest_framework.response import Response
class HelloWorldViewSet(viewsets.ViewSet):
def list(self, response):
return Response('Hello World')
Итак, в вашей более продвинутой функции list()
Вы должны взаимодействовать с базой данных, чтобы получить нужные данные, обработать их и создать отчет как сериализуемый словарь json и вернуть его как объект Response
.
Если вы не хотите чтобы переопределить стандартное действие list
, вместо этого вы можете добавить новый action
к HelloWorldViewSet
, назовем его report
:
, так что в ваших views.py:
from rest_framework import viewsets
from rest_framework.response import Response
class HelloWorldViewSet(viewsets.ViewSet):
@action(detail=False)
def report(self, request, **kwargs):
return Response('Hello World')
Надеюсь, это то, что вы искали.
Обратите внимание, что вам не нужен django -rest-framework, если вы не заинтересованы в POST
, PUT
, PATCH
, DELETE
, et c ... вы можете просто добавить path
к вашему urls.py
, который указывает на Django функцию просмотра, которая возвращает Django JsonResponse
объект, содержащий ваш отчет.