दिलचस्प पोस्ट
Android डिवाइस स्क्रीन आकार कैसे प्राप्त करें? सीएसवी निर्यात करने के लिए jQuery तालिका IndexOutOfBounds अपवाद क्या है? मेरे द्वारा यह कैसे किया जा सकता है? जेएसएफ़ ढांचे में जेएक्स-आरएस रेस्तुअल सेवा को लागू कैसे करें गतिशील रूप से एक UILabel को अद्यतन करना URL से सर्वर पर फ़ाइल डाउनलोड करें AngularJS – निर्देश के लिए समारोह पास स्ट्रिंग में आवरण बदलने के लिए जावा और रेगएक्स का उपयोग करें VBA की छिपी हुई विशेषताओं जावा के बराबर सी # के शब्दशः स्ट्रिंग @ एक इकाई परीक्षण में HttpContext.Current.Session सेट Base64 के साथ एक छवि फ़ाइल एन्कोडिंग जावास्क्रिप्ट के द्वारा संशोधित किए जाने के बाद मैं इसकी मूल स्थिति में कैसे "रीसेट" कर सकता हूं? एएसपी के लिए नियमित अभिव्यक्ति: फॉर्मेट MMddyy (लीप वर्ष इश्यू) के साथ नियमित एक्सेशन वैलीडेट सी ++ विरासत – दुर्गम आधार?

मैं अजैक्स को Django अनुप्रयोगों के साथ कैसे एकीकृत कर सकता हूं?

मैं Django के लिए नया हूँ और अजाक्स के लिए बहुत नया हूँ मैं एक परियोजना पर काम कर रहा हूं जहां मुझे दो को एकीकृत करने की आवश्यकता है। मेरा मानना ​​है कि मैं उन दोनों के पीछे के सिद्धांतों को समझता हूं, लेकिन इन दोनों को एक साथ अच्छी व्याख्या नहीं मिल पाई है।

क्या कोई मुझे एक त्वरित स्पष्टीकरण दे सकता है कि कोडबेज को उन दोनों में से एक के साथ कैसे एकीकरण करना होगा?

उदाहरण के लिए, क्या मैं अब भी अजाक्स के साथ HttpResponse उपयोग कर सकता हूं, या मेरी प्रतिक्रियाओं को अजाक्स के इस्तेमाल से बदलना है? यदि हां, तो क्या आप कृपया उदाहरण प्रदान कर सकते हैं कि अनुरोधों की प्रतिक्रियाओं को कैसे बदलना चाहिए? यदि यह कोई फर्क पड़ता है, तो मैं जो डेटा वापस ला रहा हूं वह JSON है

वेब के समाधान से एकत्रित समाधान "मैं अजैक्स को Django अनुप्रयोगों के साथ कैसे एकीकृत कर सकता हूं?"

यद्यपि यह पूरी तरह से इतनी आत्मा में नहीं है, मुझे इस प्रश्न से प्यार है, क्योंकि जब मैंने ऐसा शुरू किया था तब भी मुझे एक ही परेशानी थी, इसलिए मैं आपको एक त्वरित गाइड दे दूँगा। जाहिर है आप उनके पीछे के सिद्धांतों को नहीं समझते हैं (इसे एक अपराध के रूप में नहीं लेना है, लेकिन अगर आपने ऐसा नहीं किया है तो आप पूछना नहीं चाहते हैं)।

Django सर्वर-साइड है इसका मतलब है, कहें कि एक क्लाइंट यूआरएल में जाता है, आपके विचारों के अंदर फ़ंक्शन होता है जो वह देखता है और HTML में प्रतिक्रिया देता है। चलो इसे उदाहरणों में तोड़ दें:

views.py

 def hello(request): return HttpResponse('Hello World!') def home(request): return render_to_response('index.html', {'variable': 'world'}) 

index.html:

 <h1>Hello {{ variable }}, welcome to my awesome site</h1> 

urls.py

 url(r'^hello/', 'myapp.views.hello'), url(r'^home/', 'myapp.views.home'), 

यह प्रयोगों का सरलतम उदाहरण है 127.0.0.1:8000/hello लिए जाने का मतलब हेल्लो फ़ंक्शन के लिए अनुरोध है, 127.0.0.1:8000/home पर जाकर index.html लौटाएगा और सभी चर को बदल दिया जाएगा (आप शायद अब तक यह सब जानते हैं)।

अब हम AJAX के बारे में बात करते हैं। एजेएक्स कॉल्स ग्राहक-साइड कोड है जो एसिंक्रोनस अनुरोध करता है। यह जटिल लगता है, लेकिन इसका मतलब है कि यह आपके लिए पृष्ठभूमि में एक अनुरोध करता है और फिर प्रतिक्रिया को संभालता है। इसलिए जब आप कुछ यूआरएल के लिए एक एजेएक्स कॉल करते हैं, तो आप उसी डाटा को प्राप्त करते हैं, जो आपको उस स्थान पर जाने वाले उपयोगकर्ता के रूप में मिलेगा।

उदाहरण के लिए, 127.0.0.1:8000/hello एक एजेक्स कॉल एक ही बात वापस करेगा जैसे कि आप इसे विज़िट करते थे। केवल इस समय, आपके पास इसे जेएस फ़ंक्शन के अंदर है और आप इसे पसंद कर सकते हैं लेकिन आप चाहते हैं कि चलिए एक साधारण उपयोग के मामले को देखें:

 $.ajax({ url: '127.0.0.1:8000/hello', type: 'get', // This is the default though, you don't actually need to always mention it success: function(data) { alert(data); }, failure: function(data) { alert('Got an error dude'); } }); 

सामान्य प्रक्रिया यह है:

  1. कॉल यूआरएल 127.0.0.1:8000/hello को जाता है जैसे कि आपने एक नया टैब खोला और इसे स्वयं किया
  2. यदि यह सफल होता है (स्थिति कोड 200), तो सफलता के लिए कार्य करें, जो प्राप्त आंकड़ों को सचेत करेगा।
  3. यदि विफल हो जाता है, तो एक अलग फ़ंक्शन करें।

अब यहाँ क्या होगा? आपको इसमें 'हैलो वर्ल्ड' के साथ एक चेतावनी मिलेगी। यदि आप घर पर एक एजेक्स कॉल करते हैं तो क्या होता है? एक ही बात, आपको एक चेतावनी मिल जाएगी <h1>Hello world, welcome to my awesome site</h1>

दूसरे शब्दों में – AJAX कॉल के बारे में कुछ नया नहीं है वे पेज छोड़ने के बिना उपयोगकर्ता को डेटा और सूचना प्राप्त करने के लिए सिर्फ एक तरीका है, और यह आपकी वेबसाइट के एक चिकनी और बहुत ही सुस्त डिजाइन के लिए बनाता है। कुछ दिशानिर्देश आपको ध्यान देना चाहिए:

  1. जानें jQuery मैं इस पर अधिक जोर नहीं दे सकता हूं। आपको यह पता करने के लिए थोड़ा सा समझना होगा कि आपको प्राप्त आंकड़ों को कैसे संभालना है। आपको कुछ बुनियादी जावास्क्रिप्ट सिंटैक्स को भी समझने की ज़रूरत होगी (अजगर से दूर नहीं, आप इसे इस्तेमाल करेंगे)। मैं दृढ़ता से jQuery के लिए Envato के वीडियो ट्यूटोरियल की सिफारिश, वे महान हैं और आप सही रास्ते पर डाल देंगे
  2. JSON का उपयोग कब करना है? । आप बहुत सारे उदाहरण देखेंगे जहां Django दृश्यों द्वारा भेजे गए डेटा JSON में हैं मैं उस पर विस्तार में नहीं गया, क्योंकि यह महत्वपूर्ण नहीं है कि यह कैसे करना है (इसमें बहुत सारे स्पष्टीकरण हैं) और बहुत अधिक महत्वपूर्ण जब और इसका उत्तर है – जेएसएएन डेटा सीरियल की गई डेटा है। यही है, डेटा जो आप हेरफेर कर सकते हैं जैसे मैंने उल्लेख किया है, एक AJAX कॉल प्रतिक्रिया को प्राप्त करेगा जैसे कि उपयोगकर्ता ने स्वयं इसे किया था अब कहते हैं कि आप सभी एचटीएमएल के साथ गड़बड़ नहीं करना चाहते हैं, और बजाय डेटा भेजना चाहते हैं (वस्तुओं की एक सूची शायद) JSON इस के लिए अच्छा है, क्योंकि यह इसे एक ऑब्जेक्ट के रूप में भेजता है (जेसन डेटा एक अजगर शब्दकोश की तरह दिखता है), और फिर आप इसे पुनरावृति कर सकते हैं या कुछ और कर सकते हैं जो बेकार HTML के माध्यम से झुकने की आवश्यकता को हटा देता है
  3. इसे अंतिम जोड़ें जब आप एक वेब ऐप बनाते हैं और AJAX को कार्यान्वित करना चाहते हैं – अपने आप को एक एहसान करो सबसे पहले, किसी भी AJAX से पूरी तरह से रहित पूरे ऐप का निर्माण करें देखो कि सब कुछ काम कर रहा है। फिर, और उसके बाद ही, AJAX कॉल लिखना शुरू करें यह एक अच्छी प्रक्रिया है जो आपको बहुत कुछ सीखने में सहायता करती है।
  4. क्रोम के डेवलपर टूल का उपयोग करें चूंकि AJAX कॉल पृष्ठभूमि में किया जाता है इसलिए उन्हें डिबग करने के लिए कभी-कभी बहुत ही कठिन होता है आपको क्रोम डेवलपर उपकरण (या समान उपकरण जैसे फायरबग) और console.log डीबग करने के लिए उपयोग करना चाहिए। मैं विस्तार से नहीं समझाता, बस के आसपास गूगल और इसके बारे में पता लगाना। यह आपके लिए बहुत उपयोगी होगा
  5. सीएसआरएफ जागरूकता अंत में, याद रखें कि Django में पोस्ट अनुरोधों को csrf_token आवश्यकता है एजेएक्स कॉल के साथ, आप कई बार बिना पृष्ठ को ताज़ा करते हुए डेटा भेजना चाहते हैं। इससे पहले कि आप अंततः याद रखें कि आपको शायद कुछ परेशानी का सामना करना पड़ेगा – रुको, आप csrf_token भेजना भूल गए यह AJAX-Django एकीकरण में एक शुरुआती रोडब्लॉक है, लेकिन यह सीखने के बाद कि आप इसे कैसे खेलते हैं, यह पाई के रूप में आसान है।

वह सब कुछ जो मेरे सिर पर आता है यह एक विशाल विषय है, लेकिन हाँ, शायद वहाँ पर्याप्त उदाहरण नहीं हैं बस अपने तरीके से वहाँ काम करते हैं, धीरे-धीरे, आप इसे अंततः मिल जाएगा

इसके अतिरिक्त यूवी के उत्कृष्ट उत्तर से, मैं एक छोटे से विशेष उदाहरण को जोड़ना चाहूंगा, जिसमें यह कैसे डीजेंगो के भीतर से निपटने के लिए किया जा सकता है (जो कि किसी भी जेएस का उपयोग किया जाएगा)। उदाहरण AjaxableResponseMixin का उपयोग करता है और एक लेखक मॉडल मानता है।

 import json from django.http import HttpResponse from django.views.generic.edit import CreateView from myapp.models import Author class AjaxableResponseMixin(object): """ Mixin to add AJAX support to a form. Must be used with an object-based FormView (eg CreateView) """ def render_to_json_response(self, context, **response_kwargs): data = json.dumps(context) response_kwargs['content_type'] = 'application/json' return HttpResponse(data, **response_kwargs) def form_invalid(self, form): response = super(AjaxableResponseMixin, self).form_invalid(form) if self.request.is_ajax(): return self.render_to_json_response(form.errors, status=400) else: return response def form_valid(self, form): # We make sure to call the parent's form_valid() method because # it might do some processing (in the case of CreateView, it will # call form.save() for example). response = super(AjaxableResponseMixin, self).form_valid(form) if self.request.is_ajax(): data = { 'pk': self.object.pk, } return self.render_to_json_response(data) else: return response class AuthorCreate(AjaxableResponseMixin, CreateView): model = Author fields = ['name'] 

स्रोत: Django दस्तावेज़ीकरण, क्लास-आधारित दृश्यों के साथ फॉर्म हैंडलिंग

सरल और अच्छे आपको अपने विचारों को बदलने की ज़रूरत नहीं है Bjax आपके सभी लिंक का प्रबंधन करता है इसे बाहर की जाँच करें: Bjax

उपयोग:

 <script src="bjax.min.js" type="text/javascript"></script> <link href="bjax.min.css" rel="stylesheet" type="text/css" /> 

अंत में, इसे अपने एचटीएमएल के सिर में शामिल करें:

 $('a').bjax(); 

अधिक सेटिंग्स के लिए, चेकआउट डेमो यहां: Bjax Demo

मैंने अपने प्रोजेक्ट में AjaxableResponseMixin का उपयोग करने की कोशिश की है, लेकिन निम्न त्रुटि संदेश के साथ समाप्त हो गया था:

अनुचित रूप से कॉन्फ़िगर किया गया: पर रीडायरेक्ट करने के लिए कोई यूआरएल नहीं है या तो यूआरएल प्रदान करें या मॉडल पर get_absolute_url विधि को परिभाषित करें।

इसका कारण यह है कि CreateView जब आप ब्राउज़र को JSON अनुरोध भेजने के लिए एक एचटीपीआरपीएसपॉन्शन लौटने के बजाय एक रीडायरेक्ट प्रतिक्रिया वापस करेगा। इसलिए मैंने AjaxableResponseMixin कुछ बदलाव किए हैं। यदि अनुरोध एक super.form_valid अनुरोध है, तो यह super.form_valid विधि को कॉल नहीं करेगा, बस सीधे form.save() कॉल करें।

 from django.http import JsonResponse from django import forms from django.db import models class AjaxableResponseMixin(object): success_return_code = 1 error_return_code = 0 """ Mixin to add AJAX support to a form. Must be used with an object-based FormView (eg CreateView) """ def form_invalid(self, form): response = super(AjaxableResponseMixin, self).form_invalid(form) if self.request.is_ajax(): form.errors.update({'result': self.error_return_code}) return JsonResponse(form.errors, status=400) else: return response def form_valid(self, form): # We make sure to call the parent's form_valid() method because # it might do some processing (in the case of CreateView, it will # call form.save() for example). if self.request.is_ajax(): self.object = form.save() data = { 'result': self.success_return_code } return JsonResponse(data) else: response = super(AjaxableResponseMixin, self).form_valid(form) return response class Product(models.Model): name = models.CharField('product name', max_length=255) class ProductAddForm(forms.ModelForm): ''' Product add form ''' class Meta: model = Product exclude = ['id'] class PriceUnitAddView(AjaxableResponseMixin, CreateView): ''' Product add view ''' model = Product form_class = ProductAddForm