मैं वर्तमान में एक "बड़ी" समस्या पर फंस गया हूं, और मैं इसके बारे में स्पष्ट और संक्षिप्त होने की कोशिश करूंगा। मैं फ्लास्क का उपयोग कर पाइथन में एक उपकरण विकसित कर रहा हूं। यह एक इंट्रानेट होने का मतलब है। विचार यह है कि मेरे पास एक ग्राहक पृष्ठ है। इसका नाम, कई अन्य इंफोस, और एक विशाल चेकलिस्ट है।फ्लास्क फ्लैश और url_for AJAX
इंफोस पहले ही इनपुट फ़ील्ड में लिखे गए हैं, ताकि उपयोगकर्ता को उन्हें वहां संपादित करना होगा, एंटर दबाएं, और पृष्ठ को संपादित जानकारी (एक अधिसूचना के साथ, चमकदार संदेशों और उगने का उपयोग करके) के साथ पुनः लोड किया गया है। भारी चेकलिस्ट मुझे AJAX का उपयोग कर सिस्टम पर जाने के लिए मजबूर कर रही है, क्योंकि मैं इसे "लाइव" अपडेट करना चाहता हूं क्योंकि उपयोगकर्ता बॉक्स को टिके हुए हैं और पृष्ठ को पुनः लोड किए बिना इनपुट में सामग्री दर्ज करते हैं।
परिणामस्वरूप, मैं इंजेस के लिए इंजेक्स के लिए अपने बुनियादी इनपुट को भी बदल रहा हूं, ताकि मज़े के पुनः लोडिंग से बचा जा सके।
पहले एक संदेश कुप्पी की सुविधा चमकती चिंताओं:
मैं दो मुद्दों का सामना करना पड़ा। मेरे पास एक तरीका है जो डेटाबेस में क्लाइंट नाम अपडेट करता है, एक संदेश (सफलता या विफलता, कई चीजों के आधार पर) चमकता है, फिर पृष्ठ को फिर से प्रदर्शित करता है। पेज रीलोड से बचने के लिए, मैं AJAX के साथ सबमिट फॉर्म का प्रबंधन कर रहा हूं।
समस्या यह है कि, मेरी पायथन विधि संदेश फ्लैश करेगी। और एक बार जब मैं अपने एचटीएमएल पेज पर वापस आ गया हूं (जिसे पुनः लोड नहीं किया गया है, क्योंकि यह AJAX है), Jinja2 का get_flashed_message फ़ंक्शन मुझे कुछ भी नहीं देता है, क्योंकि इसे अपडेट नहीं किया गया है। नतीजतन, उन flashed संदेशों को पुनर्प्राप्त करना मेरे लिए असंभव है।
मैं इन्हें कैसे प्राप्त कर सकता हूं? एकमात्र समाधान जो मैं देखता हूं वह फ्लैश के किसी भी उपयोग से छुटकारा पा रहा है, और अपने संदेशों को सिडमेम कोडिंग कर रहा है, कि मैं विधि से वापस आऊंगा, और फिर जावास्क्रिप्ट में इलाज करूँगा। जो अविश्वसनीय रूप से गूंगा लगता है, क्योंकि फ्लैश फ्लास्क की एक विशेषता है, और इसे AJAX द्वारा "बेकार" बनाया गया है? मुझे लगता है कि मुझे कुछ याद आ रहा है। url_for
दूसरा मुद्दा चिंताओं (एक नोट के रूप, अब तक, मेरी फ्लैश संदेशों प्रबंधन मेरा आधार लेआउट, कि कि सभी संदेश के माध्यम से चलाता है और उन्हें ग्राउल सूचनाओं के रूप में प्रदर्शित करता है एक टेम्पलेट कॉल में किया जाता है)। यहाँ क्लाइंट का नाम संपादित करने के लिए मेरी रूप है,:
<form id="changeClientName" method="POST" action="{{ url_for('clients.edit_client_name', name=client.name) }}" style="display:inline !important;">
<input type="text" name="name" class="form-control" value="{{ client.name }}" >
<input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;"/>
</form>
आप देख सकते हैं, कार्रवाई विशेषता url_for का उपयोग करता है सही विधि ग्राहक संपादित करने के लिए कॉल करने के लिए। मेरे विधि इस प्रकार है:
@mod.route('/edit/<name>/', methods=['POST'])
def edit_client_name(name):
तो url पथ/संपादित करें/the_client_name है। नतीजतन, एक संपादन के बाद, नया यूआरएल/संपादित/the_new_client_name है, अगर हम इस नाम को दोबारा संपादित करना चाहते हैं। जाहिर है, एक बार विधि कहने के बाद, मेरे AJAX को इस क्रिया विशेषता को नए यूआरएल के साथ बदलने के लिए बदलना होगा (यदि उपयोगकर्ता पृष्ठ को बदले बिना पृष्ठ को पुनः लोड/संपादित करना चाहता है)। और यह मेरा दूसरा मुद्दा है।
नया नाम जावास्क्रिप्ट में संग्रहीत है। कार्रवाई अभी भी पुरानी यूआरएल है। इसलिए मुझे नए नाम का उपयोग करके url_for कॉल करना होगा। और मुझे jjacript चर को Jinja2 पास करने का बिल्कुल कोई तरीका नहीं मिला है।
url_for('clients.edit_client_name', name=client.name)
इस बनने के लिए:
मैं यह चाहता हूँ
url_for('clients.edit_client_name', name=my_javascript_variable_one_way_or_another)
मैं हूँ बस जे एस समारोह है कि एक फार्म की एक विशेषता को संशोधित करता है कहते हैं, और साथ मेरे कार्रवाई विशेषता को संशोधित करना यह नया url_for.लेकिन मुझे यह आसान चीज़ बनाने का कोई तरीका नहीं मिला है, यानी Jinja2 को जावास्क्रिप्ट चर दें, जो मेरे लिए बहुत ही असंभव प्रतीत होता है।
तो यहां मेरे दो मुद्दे हैं। मैं AJAX के साथ फ़्लैश संगत कैसे बना सकता हूं? और मैं Jinja2 में जावास्क्रिप्ट विशेषता कैसे पास कर सकता हूं?
मैं ईमानदारी से इन दो "बेवकूफ" मुद्दों के समाधान खोजने की उम्मीद करता हूं। एकमात्र समाधान जो मैं देख सकता हूं वह मेरी खुद की मैसेजिंग सिस्टम को कोडिंग करेगा, जो फ्लैश के लक्ष्य को हरा देगा, जो इसे एजेक्स के साथ बेकार बना देगा, जो बेवकूफ लगता है, और मेरे टेम्पलेट्स में यूआरएल हार्डकोडिंग करता है, जो फ्लास्क बनाने के शुरुआती हित को पूरी तरह से हरा देता है यूआरएल विधियों से स्वतंत्र, और यूआरएल बेहद लचीला बदलता है।
धन्यवाद।
आप इसे दो अलग-अलग प्रश्नों में विभाजित कर सकते हैं जिन्हें आप जानते हैं? सबसे पहले, आप अपने जेएसओएन प्रतिक्रिया के हिस्से के रूप में "फ्लैश संदेश" वापस लौटाते हैं और क्लाइंट साइड जावास्क्रिप्ट हैंडल को उचित कक्षाओं (यानी त्रुटि/सफलता) के साथ दिखाते हैं – Oerd
हाँ, मुझे इसे विभाजित करने में हिचकिचाहट हुई, लेकिन दोनों प्रश्न लग रहे थे वास्तव में, बहुत ही करीब, क्योंकि दोनों चिंता करते हैं कि Jinja2 AJAX का प्रबंधन कैसे करता है, दोनों url_for विधि और get_flashed_messages के लिए। मैंने हालांकि बुरा फैसला किया हो सकता है, पता नहीं:/आपके विचार के लिए, मैंने यही सोचा, लेकिन इस मामले में यह पहली तरफ चमकती हुई चमक के उपयोग को अस्वीकार करता है! चूंकि मुझे मैन्युअल रूप से फ़्लैश किए गए संदेशों को लाने और उन्हें प्रदर्शित करने के लिए, मैं फ्लैश() का उपयोग नहीं कर सकता और इसके बजाय तारों की मूल सूची का उपयोग कर सकता हूं, यह अंत में एक ही चीज़ है, नहीं? – lap0573
मुझे लगता है कि ओर्ड सही है। जेएस के माध्यम से फ्लैश संदेश संभाल लें। दूसरे प्रश्न के अनुसार, आप ऐसा कुछ क्यों नहीं पारित करते हैं जो उनके नाम की बजाय उनकी आईडी की तरह नहीं बदलेगा? –