#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, но, должно быть, я сделал что-то не так в первый раз. Это работает. Спасибо.