如何强制django rest框架api_view使用特定的解析器?

时间:2014-08-08 09:55:14

标签: json django django-rest-framework

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

请求是POST,其中body是JSON字符串。

根据具体情况,没有内容类型标题,或内容类型标题错误。

我实现了API。它与添加application/json内容类型的CURL客户端一起正常工作。但是,如果未提供内容类型,则会引发415错误。问题是我无法让客户端添加正确的内容类型。

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

1 个答案:

答案 0 :(得分: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',
}