Django 升级到restframework 3.7.0后,HTTP_ACCEPT和CONTENT_类型不匹配

Django 升级到restframework 3.7.0后,HTTP_ACCEPT和CONTENT_类型不匹配,django,django-rest-framework,Django,Django Rest Framework,我有一个django 1.11项目运行restframework 3.6.4。 我还使用djangorestframework jsonapi版本2.4.0 如果我在rest_framework/views中的APIView的dispatch函数中选中request.META,我会得到以下结果: HTTP_ACCEPT: 'application/vnd.api+json', CONTENT_TYPE: 'application/vnd.api+json', 在将restframework升级

我有一个django 1.11项目运行restframework 3.6.4。 我还使用djangorestframework jsonapi版本2.4.0

如果我在rest_framework/views中的APIView的dispatch函数中选中request.META,我会得到以下结果:

HTTP_ACCEPT: 'application/vnd.api+json',
CONTENT_TYPE: 'application/vnd.api+json',
在将restframework升级到3.7.0之后,我在同样的地方看到:

HTTP_ACCEPT: 'application/vnd.api+json',
CONTENT_TYPE: 'application/json; charset=None'
我的视图使用APIView(rest_framework.views)作为父类。 通过此视图的每一篇文章都会到达APIView的dispatch方法。 发送到dispatch方法的请求在HTTP_ACCEPT和CONTENT_TYPE之间已经不匹配

结果,使用了错误的JSONParser,并且由于request.data中的不匹配,我的所有测试都失败了

我的设置是:

REST_FRAMEWORK = {
    ...
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
        'rest_framework_json_api.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser'
    ),
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework_json_api.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ),
    'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',

    ...
}
django rest框架中更改功能的relevat commit是:


也许有人知道它为什么会发生,我该如何修复它?

请将您的单元测试添加到问题中。我在我的博客中的每一篇文章都会出现错误API@alexarsh这会影响对API的所有POST请求,还是会影响测试中的POST请求?引用的提交只影响
RequestFactory
,这不应该影响一般用法API@alexarsh引用的提交不是问题的来源。如果您查看正在发生的情况,它修复了一个错误,即非表单类型的请求(例如,
application/json
)的正文为空时可能会错误地将其
请求设置为
QueryDict
,而不是
dict
。代码不会改变
内容类型
标题的处理方式。另外,您是否100%确定您的请求内容类型为
'application/json;字符集=无“
?这通常出现在响应头中,而不是请求中。如果是请求,则此问题源自框架。