एचटीएमएल पेज के बजाय डीआरएफ जेसन 404 - पायथन, डीजेंगो, डीजेंगो-रेस्ट-फ्रेमवर्क, डीजेंगो-रेस्ट-व्यूसेट्स

मैं डीआरएफ प्रतिक्रिया के साथ डिफ़ॉल्ट django 404 (और भविष्य में अन्य) को बदलना चाहूंगा, जितना संभव हो उतना आसान है, बस वापस जाने के लिए (मानक डीआरएफ प्रतिक्रिया):

{
"detail": "Not found."
}

इसलिए मैंने इस कोड को अपनी url.py फाइल में डाल दिया।

from rest_framework.exceptions import NotFound
from django.conf.urls import handler404
handler404 = NotFound

जब मैंने डिबग फ्लैग सेट किया (सेट ट्रू में मैं 500 का हो रहा हूं, जब इसे फाल्स 404 पर सेट किया गया था लेकिन html रूप में।

मैं यहाँ पढ़ा डॉक्टर हूँ: http://www.django-rest-framework.org/api-guide/exceptions/ लेकिन ईमानदार होने के लिए मैं यह नहीं जानता कि इसे वास्तविकता में कैसे रखा जाए।

यह आसान प्रतीत होता है, लेकिन किसी तरह मैं इसे लागू करने में विफल रहा (ऊपर कोड अन्य एसओ धागे के रूप में आता है)।

पहले ही, आपका बहुत धन्यवाद

उत्तर:

जवाब के लिए 0 № 1

आपको इसे उपयोग करने के लिए 404 के लिए एक कस्टम दृश्य बनाना चाहिए। उदाहरण के लिए:

में views.py:

from django.http import HttpResponseNotFound
import json

def error404(request, exception):
response_data = {}
response_data["detail"] = "Not found."
return HttpResponseNotFound(json.dumps(response_data), content_type="application/json")

फिर urls.py:

from django.conf.urls import handler404

from yourapp.views import error404

handler404 = error404

जवाब के लिए 0 № 2

आप DRF ट्राई कर सकते हैं कस्टम अपवाद हैंडलिंग

from rest_framework.views import exception_handler


def custom_exception_handler(exc, context):
response = exception_handler(exc, context)

if response.status_code == 404:
response = Response(data="custom response") or HttpResponse("Custom msg")

return response

उदाहरण:

if response.status_code == 404:
response = Response(data={"custom_key":"custom msg for 404 status code"})

और अपने को बदलो settings.py कुछ इस तरह से,

REST_FRAMEWORK = {
"EXCEPTION_HANDLER":
"my_project.my_app.utils.custom_exception_handler"
}

संबंधित सवाल
सबसे लोकप्रिय