2014-10-23 6 views
11

मेरे पास वर्तमान में एक फ्लास्क वेब सर्वर है जो अंतर्निहित अनुरोध ऑब्जेक्ट का उपयोग कर JSON API से डेटा खींचता है।क्या फ्लास्क, सर्वर-साइड में एक प्रस्तुत टेम्पलेट को गतिशील रूप से अपडेट करना संभव है?

उदाहरण के लिए:

def get_data(): 
    response = requests.get("http://myhost/jsonapi") 
    ... 
    return response 

@main.route("/", methods=["GET"]) 
def index(): 
    return render_template("index.html", response=response) 

यहां मुद्दा यह है कि स्वाभाविक रूप से GET पद्धति केवल एक बार चलाया जाता है है, पहली बार get_data कहा जाता है। डेटा रीफ्रेश करने के लिए, मुझे फ्लास्क wsgi सर्वर को रोकना और पुनरारंभ करना होगा। मैंने थोड़ी देर में कोड के विभिन्न हिस्सों को सही/नींद लूप में लपेटने की कोशिश की है, लेकिन यह पेज लोड करने से werkzeug को रोकता है।

पृष्ठ को फिर से लोड किए बिना सर्वर को पुनरारंभ किए बिना डेटा को गतिशील रूप से प्राप्त करने के लिए सबसे पाइथोनिक तरीका क्या है?

+1

यदि आप मार्ग के लिए तैयार अपने 'get_data()' एक यूआरएल के लिए विधि, तो आप सिर्फ इस्तेमाल कर सकते हैं कर रहे हैं [AJAX] (http://api.jquery.com/jquery.ajax/) इसे कहते हैं ग्राहक से और परिणामों के साथ पृष्ठ अद्यतन करें। – Celeo

+0

@Celeo यह एक तरीका है। लेकिन कहें कि मेरे पास एक अलग फ़ाइल में 'get_data() 'है और मैं कोई और रास्ता नहीं जोड़ना चाहता हूं? मेरा सवाल यह बताता है कि यह फ्लास्क या फ्लास्क एक्सटेंशन का उपयोग करके पूरा किया जा सकता है या नहीं। – damienstanton

+1

सर्वर के पहले से ही टेम्पलेट प्रस्तुत करने के बाद आपको सर्वर से डेटा प्राप्त करने के लिए कुछ रास्ता तय करना होगा। यदि आप क्लाइंट-इंटरैक्शन के बिना पृष्ठभूमि में डेटा को अपडेट करना चाहते हैं, तो आप [सेलेरी] (http://www.celeryproject.org/) को आजमा सकते हैं। – Celeo

उत्तर

15

आप चर्चा कर रहे हैं कि शायद दो अलग-अलग मुद्दे क्या हैं।

  1. की समस्या मान लेते हैं कि आप गतिशील डेटा स्रोत, get_data() कॉल कर रहे हैं, केवल एक बार और एक वैश्विक response में अपनी (स्थिर) मूल्य रखने है। यह एक बार कॉल नहीं दिखाया गया है, लेकिन मान लीजिए कि यह आपके कोड में कहीं है। फिर, अगर आप अपडेट प्राप्त करने के पेज (/) ताज़ा करने के लिए तैयार हैं, तो आप कर सकते थे:

    @main.route("/", methods=['GET']) 
    def index(): 
        return render_template("index.html", response=get_data()) 
    

    यह हर पृष्ठ लोड पर ताजा डेटा लाने होगा।

  2. फिर अपने प्रश्न के अंत में, आप पूछें कि "डेटा को फिर से लोड करने या सर्वर को पुनरारंभ किए बिना मुझे प्राप्त डेटा कैसे प्राप्त करें।" यह एक पूरी तरह से अलग मुद्दा है। आपको अपने कोड में AJAX या WebSocket अनुरोधों का उपयोग करना होगा। ऐसा करने के तरीके के बारे में कुछ ट्यूटोरियल हैं (उदा। this one) जिन्हें आप गुगलिंग "फ्लास्क AJAX" के माध्यम से पा सकते हैं। लेकिन इसके लिए एक जावास्क्रिप्ट AJAX कॉल की आवश्यकता होगी। मैं सुझाव देता हूं कि "फ्लास्क AJAX jQuery" खोज के माध्यम से यह कैसे किया जाता है, उदाहरण के लिए jQuery को अमूर्त और सरल बनाना होगा जो आपको क्लाइंट साइड पर करना है। या, यदि आप अपने वेब पेज के बीच निचले-विलंबता कनेक्शन के लिए वेबसाकेट्स का उपयोग करना चाहते हैं, तो यह भी संभव है; उदाहरणों के लिए खोजें (उदा। like this one)।

+1

दो मुद्दों में अलग होने पर अच्छा बिंदु। यह मेरे विशिष्ट मामले और सामान्य प्रश्न दोनों का उत्तर देता है। यह यहां साझा करने के लायक हो सकता है [फ्लास्क-सॉकेटियो] (http://flask-socketio.readthedocs.org/) यहां भी। – damienstanton

संबंधित मुद्दे

 संबंधित मुद्दे