@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
تم ضبطه بشكل صحيح على 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