【问题标题】: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',
}