@permission_classes((AllowAny, ))
class Viewset(viewsets.ViewSet):
renderer_classes = (JSONRenderer, )
def list(self, request, *args, **kwargs):
return Response()
null
や{}
ような有効なjson応答本文
Content-Type
ヘッダーが設定されておらず、空の応答が返されます-jqueryのajax()
を使用してリクエストを行う場合は特に苦痛です。 parseerrorをスローし、本文が空の場合の成功応答の約束を拒否します。 こちらをご覧くださいhttps://stackoverflow.com/a/6186905
ここでのPR: https :
簡単に説明します。正確な設定を再現していない可能性がありますが、簡単な手動テストでは、 Content-Type
ヘッダーがapplication/json
正しく設定されていることが示されています。
空の応答に関しては、@ kltdwrdsに同意する傾向があります。 仕様で空の本文が許可されているかどうかはわかりませんが、JavaScriptのJSON.parse
とPythonのjson.loads
両方が空の文字列のデコードに失敗します。
つまり、 data=None
はnull
としてエンコードする必要があります。
考え直してみると、現在の動作は理にかなっています。 JSON.parse
とjson.loads
は失敗しますが、解析する前にコンテンツタイプを確認するのはクライアントの責任です。 どちらかといえば、これはjQueryのバグです。
うーん、使ってる
from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
Content-Type
ヘッダーがどこに設定されているかはわかりませんが、上記の例を使用して、応答からヘッダーが欠落していることを確認しました。
空のレンダラー応答でContent-Type
ヘッダーが削除されているようです(80行目)
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72
return Response()
現在の動作は、意図的なものです。 null
を返すことも有効ですが、コンテンツタイプのない空の応答を返す方法が必要なのが一般的です。 今のところはそのままにしておきたいと思います。
最も参考になるコメント
空のレンダラー応答で
Content-Type
ヘッダーが削除されているようです(80行目)https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72