【问题标题】:How to force django rest framework api_view to use a specific parser?如何强制 django rest framework api_view 使用特定的解析器?
【发布时间】:2014-08-08 09:55:13
【问题描述】:

我正在为不受我控制的旧客户端实现 API。

请求是一个 POST,其正文是一个 JSON 字符串。

视情况而定,没有内容类型头,或者内容类型头错误。

我实现了 API。它适用于添加 application/json 内容类型的 CURL 客户端。但是当没有提供内容类型时会抛出 415 错误。问题是我不能让客户端添加正确的内容类型。

无论请求的标头如何,如何强制@api_view(['POST']) 包裹的视图使用JSONParser

【问题讨论】:

    标签: json django django-rest-framework


    【解决方案1】:

    如果您想放弃标准的内容协商并使用更简单的东西,您可以使用自定义内容协商类。 given in the docs 示例符合您的需求。

    class IgnoreClientContentNegotiation(BaseContentNegotiation):
        def select_parser(self, request, parsers):
            """
            Select the first parser in the `.parser_classes` list.
            """
            return parsers[0]
    

    您还需要调整设置,使用自定义类...

    REST_FRAMEWORK = {
        'DEFAULT_CONTENT_NEGOTIATION_CLASS':
            'myapp.negotiation.IgnoreClientContentNegotiation',
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 2021-12-21
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      相关资源
      最近更新 更多