वाह, यह एक साल हो गया है क्योंकि मैंने यह धागा देखा है। खैर, Django 1.3 और जादुई, अनियंत्रित वर्ग-आधारित विचारों के आगमन के साथ, यह Django की दृश्य संबंधी कार्यक्षमता को सीमित करने के लिए और अधिक आसान हो गया है। मेरी परियोजना जो Django के क्लास-आधारित जेनेरिक सीआरयूएस दृश्यों का भारी उपयोग करता है उसे AJAX और JSON कार्यक्षमता की आवश्यकता होती है। मैंने AJAX का समर्थन करने और JSON प्रारूप में AJAX प्रतिक्रियाओं को वापस करने के लिए Django के अद्यतन दृश्य को संशोधित करने का एक उदाहरण जोड़ा है। एक नज़र:
def errors_to_json(errors):
"""
Convert a Form error list to JSON::
"""
return dict(
(k, map(unicode, v))
for (k,v) in errors.iteritems()
)
class HybridUpdateView(UpdateView):
"""
Custom update generic view that speaks JSON
"""
def form_valid(self, form, *args, **kwargs):
"""
The Form is valid
"""
form.save()
self.message = _("Validation passed. Form Saved.")
self.data = None
self.success = True
payload = {'success': self.success, 'message': self.message, 'data':self.data}
if self.request.is_ajax():
return HttpResponse(json.dumps(payload),
content_type='application/json',
)
else:
return super(HybridUpdateView, self).form_valid(
form, *args, **kwargs
)
def form_invalid(self, form, *args, **kwargs):
"""
The Form is invalid
"""
#form.save()
self.message = _("Validation failed.")
self.data = errors_to_json(form.errors)
self.success = False
payload = {'success': self.success, 'message': self.message, 'data':self.data}
if self.request.is_ajax():
return HttpResponse(json.dumps(payload),
content_type='application/json',
)
else:
return super(HybridUpdateView, self).form_invalid(
form, *args, **kwargs
)
प्रतिक्रिया JSON तीन क्षेत्रों में शामिल है - (success
(जो एक मानव पठनीय संदेश है) message
, data
(जो इस मामले है प्रपत्र त्रुटियों की सूची होगा) और जो या तो true
या false
, यह दर्शाता है कि अनुरोध सफल था या नहीं।)। JQuery क्लाइंट-साइड में इसे संभालना बहुत आसान है। एक नमूना प्रतिक्रिया लगता है:
Content-Type: application/json
{"message": "Validation failed.", "data": {"host": ["This field is required."]}, "success": false}
यह सिर्फ मैं कैसे JSON करने के लिए प्रपत्र त्रुटियों धारावाहिक और एक वर्ग आधारित सामान्य दृश्य में इसे लागू किया लेकिन नियमित रूप से शैली विचारों के साथ काम करने के लिए के रूप में अच्छी cannibalized किया जा सकता का एक उदाहरण है।
हाय कैल्विन, क्या एक त्रुटि माना जाता है और सफलता क्या है? क्या कोई मूल्य है कि मुझे वापस जाना चाहिए? सर्वर की तरफ, मैं JSON के रूप में सत्यापन त्रुटियों की एक सूची कैसे वापस कर सकता हूं ताकि मैं उन्हें त्रुटि फ़ंक्शन का उपयोग कर क्लाइंट साइड पर सूचीबद्ध कर सकूं? यह थोड़ा सा है जो मुझे भ्रमित करता है। धन्यवाद। –
सफलता यह है कि यदि आप सेवा भेजते हैं तो वापस डेटा भेजता है। सफलता पर वह जगह है जहां आप डेटा में हेरफेर करेंगे और इसके साथ कुछ करेंगे (आमतौर पर एक फ़ील्ड अपडेट करना या संदेश प्रदर्शित करना)। त्रुटि यह है कि यदि सेवा एक घातक त्रुटि देता है (सेवा टूटा हुआ है या कुछ भ्रष्ट है)। आम तौर पर आप झूठी वापसी करेंगे और कुछ भी नहीं करेंगे, लेकिन यदि आपकी चीज़ मौजूद होने के लिए सेवा की आवश्यकता है, तो आप उपयोगकर्ता को सेवा बताएंगे कि सेवा कम है। चीजों का JSON पक्ष आपकी बैक-एंड सेवा द्वारा संभाला जाता है। दुर्भाग्य से मेरे बैक-एंड कौशल काफी नहीं हैं इसलिए मैं आपको यह नहीं बता सकता कि सेवा कैसे लिखना है। – Calvin