Django Rest Framework: вид, который поддерживает произвольные HTTP-глаголы? - PullRequest
1 голос
/ 09 февраля 2020

Существует ли тип представления, который, например, позволит мне одновременно:

GET /account/items

и

POST / PATCH account/items/<pk>/ все в одном go? Из одного Viewset или что-то? Обратите внимание, что я ничего не создаю на маршруте account/items на POST - но мне нужно POST к account/items/<pk>, чтобы выполнить конкретное c действие

Насколько я могу судить, мне нужно создайте два отдельных представления, одно для получения списка с помощью GET /account/items, а другое для выполнения пользовательских операций POST и PATCH в подробном представлении. Это правильно?

1 Ответ

0 голосов
/ 09 февраля 2020

Вы должны использовать представления на основе классов DRF .

Использование класса APIView во многом аналогично использованию обычного класса View, как обычно, входящий запрос отправляется соответствующему методу-обработчику, такому как .get () или .post ().

Вот пример с обработчиком get и post. Я абстрагировал код для обновления пользователя до вспомогательного метода, который вы можете создать - ваша реализация будет отличаться:

from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth.models import User

from my_project.accounts.helpers import update_user

class UserView(APIView):

    def get(self, request, *args, **kwargs):
        """
        Return a user.
        """
        user_data = User.objects.get(pk=kwargs['pk']).values()
        return Response(user_data)

    def patch(self, request, *args, **kwargs):
        user = User.objects.get(pk=kwargs['pk'])
        data = request.POST
        update_user(user, data)
        return Response('Updated user!')

Вы также можете посмотреть ViewSets , которые предоставляют простое управление операциями CRUD.

...