Django-rest-framework: JSONRenderer tidak mengembalikan respons json yang valid saat `data=None`

Dibuat pada 13 Jun 2018  ·  4Komentar  ·  Sumber: encode/django-rest-framework

Langkah-langkah untuk mereproduksi

@permission_classes((AllowAny, ))
class Viewset(viewsets.ViewSet):
    renderer_classes = (JSONRenderer, )
    def list(self, request, *args, **kwargs):
        return Response()

Perilaku yang diharapkan

Badan respons json yang valid seperti null atau {}

Perilaku sebenarnya

Tidak ada set header Content-Type dan respons kosong dikembalikan - terutama menyakitkan saat membuat permintaan dengan ajax() jquery. Itu melempar parseerror dan menolak janji pada respons sukses dengan tubuh kosong. Lihat di sini https://stackoverflow.com/a/6186905

PR di sini: https://github.com/encode/Django-rest-framework/pull/6027

Komentar yang paling membantu

Sepertinya header Content-Type dihapus pada respons perender kosong (baris 80)
https://github.com/encode/Django-rest-framework/blob/master/rest_framework/response.py#L72

Semua 4 komentar

Hanya klarifikasi singkat.. Saya mungkin tidak membuat ulang pengaturan persis Anda, tetapi pengujian manual cepat menunjukkan bahwa Content-Type header diatur dengan benar ke application/json .

Mengenai respons kosong, saya cenderung setuju dengan @kltdwrds. Saya tidak tahu apakah spec memungkinkan tubuh kosong, bagaimanapun, baik JavaScript untuk JSON.parse dan Python json.loads gagal untuk memecahkan kode string kosong.

Artinya, data=None harus dikodekan sebagai null .


Setelah dipikir-pikir, perilaku saat ini masuk akal. Meskipun JSON.parse dan json.loads gagal, klien bertanggung jawab untuk memeriksa tipe konten sebelum menguraikan. Jika ada, ini adalah bug di jQuery.

hmm saya pakai

from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response

Tidak yakin di mana tajuk Content-Type disetel, tetapi saya baru saja mengonfirmasi bahwa itu hilang dari tanggapan menggunakan contoh di atas.

Sepertinya header Content-Type dihapus pada respons perender kosong (baris 80)
https://github.com/encode/Django-rest-framework/blob/master/rest_framework/response.py#L72

Perilaku kita saat ini untuk return Response() disengaja. Meskipun mengembalikan null juga akan valid, biasanya kita memerlukan cara untuk mengembalikan respons kosong tanpa tipe konten. Saya mungkin lebih suka kita membiarkan hal-hal apa adanya untuk saat ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat