Django-rest-framework: لا يُرجع JSONRenderer استجابة json صالحة عندما `البيانات = بلا`

تم إنشاؤها على ١٣ يونيو ٢٠١٨  ·  4تعليقات  ·  مصدر: encode/django-rest-framework

خطوات التكاثر

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

سلوك متوقع

نص استجابة json صالح مثل null أو {}

السلوك الفعلي

لم يتم تعيين رأس Content-Type وتم إرجاع استجابة فارغة - مؤلمة بشكل خاص عند تقديم طلبات باستخدام jquery ajax() . إنه يلقي خطأ تحليليًا ويرفض الوعد باستجابة ناجحة بجسم فارغ. انظر هنا https://stackoverflow.com/a/6186905

العلاقات العامة هنا: https://github.com/encode/django-rest-framework/pull/6027

التعليق الأكثر فائدة

يبدو أنه تم حذف رأس Content-Type في استجابة العارض الفارغة (السطر 80)
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72

ال 4 كومينتر

مجرد توضيح سريع .. ربما لا أقوم بإعادة إنشاء الإعداد الدقيق الخاص بك ، لكن اختبارًا يدويًا سريعًا يوضح أن رأس 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 سيكون أيضًا صالحًا ، إلا أنه من المعتاد أكثر أننا نحتاج إلى طريقة لإرجاع استجابة فارغة بدون نوع محتوى. ربما أفضل أن نترك الأشياء كما هي الآن.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات