Django 升级到restframework 3.7.0后,HTTP_ACCEPT和CONTENT_类型不匹配
我有一个django 1.11项目运行restframework 3.6.4。 我还使用djangorestframework jsonapi版本2.4.0 如果我在rest_framework/views中的APIView的dispatch函数中选中request.META,我会得到以下结果: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升级
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;字符集=无“
?这通常出现在响应头中,而不是请求中。如果是请求,则此问题源自框架。