我有一个运行restframework 3.6.4的django 1.11项目。 我还使用djangorestframework-jsonapi版本2.4.0。
如果我在rest_framework / views的APIView的分派功能中检查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)作为父类的View。 通过此视图的每个POST都会到达APIView的调度方法。 正在发送到分派方法的请求已经在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-framework中相关的提交会更改功能:
https://github.com/encode/django-rest-framework/commit/0ec915e6234bdc602e131f08e8cff46fcf3dc3ff
也许有人知道它为什么会发生,我该如何解决?