Обрабатывать параметр запроса POST request из просматриваемого API в Django Rest Framework

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

У меня есть требование о наличии параметра запроса в запросе POST с полезной нагрузкой JSON в теле.

Теперь в django-rest-framework я смог сделать это, переопределив perform_create метод ModelViewSet в моем классе view, но что я могу сделать, чтобы он отображался в просматриваемом API. Я попробовал django-filter и его серверную часть, но они ориентированы на фильтрацию (очевидно) в запросе GET. Я не хочу фильтровать, но хочу просто использовать этот параметр запроса в качестве параметра для запуска задач celery во время perform_create .

Вот как сейчас выглядит мой viewset.

 class AbcViewSet(viewsets.ModelViewSet):
    queryset = Abc.objects.all()
    serializer_class = AbcSerializer
    filterset_fields = ('fk_field', )


    def perform_create(self, serializer):
        query_param1 = self.request.query_params.get('param', None)
        ...schedule celery task using the query_param1 and save the model...


  

мой запрос на это будет выглядетьhttp://127.0.0.1:8000/abc/?param=xyz

Если вы заметили выше, я хочу иметь возможность заполнить это param с помощью просматриваемого API. При попытке поиска у меня такое чувство, что для этого потребуется создать какой-то рендеринг HTML-представления для параметра, но если его проще получить из просматриваемого API, это определенно помогло бы. Прямо сейчас я не вижу никакого способа отправить какие-либо параметры запроса, кроме фильтров.

Ответ №1:

Вы можете вызвать просматриваемый API с определенным параметром запроса, например:

http://localhost:8000/yoururl?param=111 и при выполнении POST self.request.query_params выдаст <QueryDict: {'param': ['111']}> .

Комментарии:

1. Я действительно попробовал это и проверил chrome dev tools, но, должно быть, я сделал что-то не так в первый раз. Это работает. Спасибо.