升级到Restframework 3.7.0后,HTTP_ACCEPT和CONTENT_TYPE不匹配

时间:2018-12-04 14:47:58

标签: django django-rest-framework

我有一个运行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'

我有使用API​​View(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

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

0 个答案:

没有答案