Как вернуть пользовательский ответ json с помощью Django REST Framework? - PullRequest
0 голосов
/ 03 августа 2020

На самом деле я возвращаю json из некоторых медиафайлов, в зависимости от установленного URL <str:scene> varialbe. Я просто хочу использовать интерфейс rest framework и токен аутентификации, поэтому я думаю, что это может быть более простой способ представить мои данные. Вот что я делаю:

views.py

class Manager(views.APIView):
    def get(self, request, scene):
        return JsonResponse({'get': scene})

    def post(self, request, scene):
        return JsonResponse({'post': scene})

urls.py

router = routers.DefaultRouter()
router.register(r'', views.Manager)

urlpatterns = [
    path('<str:scene>', include(router.urls)),
]

Этот код требует я использую аргумент basename в path, но, поскольку я не использую модели, мне нечего передать в нем.

Итак, как лучше всего вернуть мои пользовательские данные json, используя интерфейс rest framework и его токен авторизации?

Ответы [ 3 ]

1 голос
/ 03 августа 2020

Вы не можете добавить APIView к маршрутизаторам, поскольку маршрутизаторы предназначены для ViewSet классы. Кроме того, в DRF хорошо использовать класс Response вместо JsonResponse

from rest_framework import views
<b>from rest_framework.response import Response</b>


class Manager(views.APIView):
    def get(self, request, scene):
        return <b>Response({'get': scene})</b>

    def post(self, request, scene):
        return <b>Response({'post': scene})</b>

Теперь измените шаблоны URL как,

urlpatterns = [
    path('<str:scene>', <b>Manager.as_view()</b>, name='manager-view'),
]
0 голосов
/ 03 августа 2020

Я не знаю, откуда взялся этот JsonResponse (если это зависимость), но DRF имеет Response, который вернет json, который ему нужен.

from rest_framework.response import Response

class Manager(views.APIView):

    def get(self, request, scene):
        return Response({'get': scene})

    def post(self, request, scene):
        return Response({'post': scene})
0 голосов
/ 03 августа 2020

Ваш код уже выдаёт json данные

...