मैं किसी त्रुटि कोड के साथ हेडर लौटने की बजाय कुछ JSON प्रतिक्रियाएं वापस लौटना चाहूंगा। क्या इस तरह की त्रुटियों को संभालने के लिए tastypie में कोई रास्ता है?Tastypie-django कस्टम त्रुटि हैंडलिंग
उत्तर
अंत में यह पता चला। अगर किसी और को इसकी ज़रूरत है, तो देखने के लिए यहां एक अच्छा संसाधन है। http://gist.github.com/1116962
class YourResource(ModelResource):
def wrap_view(self, view):
"""
Wraps views to return custom error codes instead of generic 500's
"""
@csrf_exempt
def wrapper(request, *args, **kwargs):
try:
callback = getattr(self, view)
response = callback(request, *args, **kwargs)
if request.is_ajax():
patch_cache_control(response, no_cache=True)
# response is a HttpResponse object, so follow Django's instructions
# to change it to your needs before you return it.
# https://docs.djangoproject.com/en/dev/ref/request-response/
return response
except (BadRequest, ApiFieldError), e:
return HttpBadRequest({'code': 666, 'message':e.args[0]})
except ValidationError, e:
# Or do some JSON wrapping around the standard 500
return HttpBadRequest({'code': 777, 'message':', '.join(e.messages)})
except Exception, e:
# Rather than re-raising, we're going to things similar to
# what Django does. The difference is returning a serialized
# error message.
return self._handle_500(request, e)
return wrapper
आप tastypie के Resource
विधि _handle_500()
के ऊपर लिख सकता है। तथ्य यह है कि यह अंडरस्कोर से शुरू होता है, वास्तव में इंगित करता है कि यह एक "निजी" विधि है और इसे ओवरराइट नहीं किया जाना चाहिए, लेकिन मुझे इसे wrap_view()
को ओवरराइट करने और बहुत सारे तर्क को दोहराने के बजाय एक क्लीनर तरीका मिल गया है।
from tastypie import http
from tastypie.resources import ModelResource
from tastypie.exceptions import TastypieError
class MyResource(ModelResource):
class Meta:
queryset = MyModel.objects.all()
fields = ('my', 'fields')
def _handle_500(self, request, exception):
if isinstance(exception, TastypieError):
data = {
'error_message': getattr(
settings,
'TASTYPIE_CANNED_ERROR',
'Sorry, this request could not be processed.'
),
}
return self.error_response(
request,
data,
response_class=http.HttpApplicationError
)
else:
return super(MyResource, self)._handle_500(request, exception)
इस मामले में मैं यह पता चल सके exception
TastypieError
का एक उदाहरण है और संदेश के साथ एक JSON प्रतिक्रिया वापसी "क्षमा करें, इस अनुरोध कर सकता द्वारा सभी Tastypie त्रुटियां पकड़:
इस तरह से मैं इसका इस्तेमाल है संसाधित नहीं किया जा सकता है। " यदि यह एक अलग अपवाद है, तो मैं super()
का उपयोग कर पैरेंट _handle_500
पर कॉल करता हूं, जो विकास मोड में django त्रुटि पृष्ठ या send_admins()
उत्पादन मोड में बना देगा।
यदि आप किसी विशिष्ट अपवाद के लिए विशिष्ट JSON प्रतिक्रिया चाहते हैं, तो बस isinstance()
एक विशिष्ट अपवाद पर जांचें। यहाँ सब Tastypie अपवाद हैं:
https://github.com/toastdriven/django-tastypie/blob/master/tastypie/exceptions.py
वास्तव में मुझे लगता है कि एक बेहतर/क्लीनर Tastypie में यह करने के लिए जिस तरह से होना चाहिए, इसलिए मैं उनके GitHub पर opened a ticket।
- 1. कस्टम त्रुटि वेब.कॉन्फिग/ग्लोबल.एएसएक्स में हैंडलिंग गैर-मौजूद निर्देशिका
- 2. पेज/जावास्क्रिप्ट त्रुटि हैंडलिंग
- 3. स्मॉलटॉक त्रुटि हैंडलिंग
- 4. pgp_sym_encrypt/pgp_sym_decrypt त्रुटि हैंडलिंग
- 5. सीएक्सएफ त्रुटि हैंडलिंग ओवरराइड
- 6. PHP DOMDocument त्रुटि हैंडलिंग
- 7. कोडनिर्देशक ईमेल त्रुटि हैंडलिंग
- 8. सक्रिय संसाधन त्रुटि हैंडलिंग
- 9. malloc त्रुटि हैंडलिंग
- 10. jQuery AJAX त्रुटि हैंडलिंग
- 11. त्रुटि हैंडलिंग/लॉगिंग रणनीति
- 12. अच्छा त्रुटि हैंडलिंग अभ्यास
- 13. वेबएपी जेसन.NET कस्टम डेट हैंडलिंग
- 14. लूप में vba त्रुटि हैंडलिंग
- 15. अधिकतम निष्पादन समय त्रुटि हैंडलिंग
- 16. एसक्यूएल सर्वर त्रुटि हैंडलिंग पैटर्न
- 17. पाइथन विशिष्ट त्रुटि कोड हैंडलिंग?
- 18. कोणीय: $ http 404 त्रुटि हैंडलिंग
- 19. WCF बाकी सेवा त्रुटि हैंडलिंग और WebChannelFactory
- 20. ब्लूटूथ एंड्रॉइड आरएफसीओएमएम/एसपीपी त्रुटि हैंडलिंग सुझाव
- 21. jQuery जेएसटी और जेएसओएन त्रुटि हैंडलिंग
- 22. सी # CS0079 घटना हैंडलिंग संकलन त्रुटि
- 23. रेल पर रूबी -एचटीटीपी त्रुटि हैंडलिंग
- 24. एएसपी.NET एमवीसी अपवाद लॉगिंग त्रुटि हैंडलिंग
- 25. jqgrid सर्वर साइड त्रुटि संदेश/सत्यापन हैंडलिंग
- 26. 3 स्तरित आर्किटेक्चर में त्रुटि हैंडलिंग
- 27. jquery फॉर्म प्लगइन, कोई त्रुटि हैंडलिंग
- 28. knockout js सर्वोत्तम प्रथाओं AJAX त्रुटि हैंडलिंग
- 29. बैच प्रोग्रामिंग, त्रुटि हैंडलिंग, और प्रारंभ कमान
- 30. एमवीसी एरिया एरर हैंडलिंग
अंत में इसे समझ लिया। अगर किसी और को इसकी ज़रूरत है, तो देखने के लिए यहां एक अच्छा संसाधन है। https://gist.github.com/1116962 –
यदि आप कर सकते हैं, इसे साफ़ करें और समुदाय की सहायता के लिए इसे उत्तर दें – Dave