【问题标题】:Handle POST request query param from browsable API in Django Rest Framework在 Django Rest Framework 中处理来自可浏览 API 的 POST 请求查询参数
【发布时间】:2019-09-12 01:38:18
【问题描述】:

我需要在 POST 请求中包含查询参数,正文中包含 JSON 有效负载。

现在在 django-rest-framework 中,我已经能够通过在我的视图类中覆盖 ModelViewSet 的 perform_create 方法来做到这一点,但是我可以做些什么让它出现在可浏览的 API 中。我尝试了 django-filter 及其后端,但它们适用于(显然)在 GET 请求中进行过滤。我不想过滤,但只想使用该查询参数作为参数在perform_create 期间运行 celery 任务。

这就是我的视图集现在的样子。

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

如果您注意到以上内容,我希望能够使用可浏览的 API 填写param。尝试搜索时,我感觉它将涉及为参数创建某种 HTML 视图渲染,但如果它更容易从可浏览的 API 中获得,那肯定会有所帮助。目前,除了过滤器之外,我看不到任何发送任何查询参数的方法。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您可以使用特定的查询参数调用可浏览的 API,例如:

    http://localhost:8000/yoururl?param=111 并且在执行 POST 时,self.request.query_params 将产生 <QueryDict: {'param': ['111']}>。

    【讨论】:

    • 我实际上尝试过并检查了 chrome 开发工具,但我第一次肯定做错了什么。这行得通。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2017-11-08
    • 2013-01-15
    • 1970-01-01
    • 2016-10-17
    • 2016-01-31
    相关资源
    最近更新 更多