2013-03-18 14 views
20

में रीडायरेक्ट करते समय एक पोस्ट अनुरोध करें मैं फ्लास्क के साथ काम कर रहा हूं। मैं ऐसी स्थिति में हूं जहां मुझे अनुरोध विधि को संरक्षित करने के लिए एक अन्य अनुरोध पर एक पोस्ट अनुरोध को पुनर्निर्देशित करने की आवश्यकता है यानी "पोस्ट" विधि। जब मैंने "GET" अनुरोध को किसी अन्य यूआरएल पर रीडायरेक्ट किया जो "GET" अनुरोध विधि स्वीकार करता है ठीक है। यहाँ नमूना कोड है जिससे मैं ऊपर कोशिश कर रहा हूँ है ..फ्लास्क

@app.route('/start',methods=['POST']) 
def start(): 
    flask.redirect(flask.url_for('operation')) 

@app.route('/operation',methods=['POST']) 
def operation(): 
    return "My Response" 

मैं "/ शुरू" करने के लिए एक "पोस्ट" अनुरोध बनाना चाहते यूआरएल जो आंतरिक रूप से भी एक "पोस्ट" अनुरोध करने के लिए "/ ऑपरेशन" बनाता है यूआरएल.अगर मैं इस तरह कोड को संशोधित करता हूं,

@app.route('/operation',methods=['GET']) 
def operation(): 
    return "My Response" 

कोड "GET" अनुरोध के लिए ठीक काम करता है। लेकिन मैं भी POST अनुरोध करने में सक्षम होना चाहता हूं।

उत्तर

53

Flask में प्रदान की redirect समारोह डिफ़ॉल्ट रूप से ग्राहक के लिए एक 302 स्थिति कोड भेजता है और Wikipedia पर mentionned के रूप में:

कई वेब ब्राउज़र एक तरह से है कि इस मानक का उल्लंघन में इस कोड को लागू किया, बदलते मूल अनुरोध (उदाहरण के लिए POST) में नियोजित प्रकार के बावजूद, GET को प्राप्त करने के नए अनुरोध का अनुरोध प्रकार। [1] इस कारण से, HTTP/1.1 (आरएफसी 2616) ने नए व्यवहार कोड 303 और 307 को दो व्यवहारों के बीच असंबद्ध करने के लिए जोड़ा, 303 के साथ अनुरोध प्रकार को बदलने के लिए जरूरी है, और 307 मूल रूप से अनुरोध प्रकार को संरक्षित करता है भेज दिया।

तो, 302 के बजाय एक 307 स्थिति कोड भेजने के उपयोग किए गए HTTP विधि के संरक्षण और इस तरह व्यवहार आप उम्मीद कर रहे हैं के लिए ब्राउज़र को बताना चाहिए। redirect पर आपका कॉल इस तरह दिखेगा:

flask.redirect(flask.url_for('operation'), code=307) 
+1

सटीक सुझाव के लिए धन्यवाद! (धनुष) अभी भी मैं एक ऐसे स्रोत का सुझाव मांगता हूं जहां मैं गहरे में फ्लास्क सीख सकता हूं। मैं ऐसे "कोड" संबंधित सामान सीखना चाहता हूं। मुझे लगता है कि वे चीजें कोर हैं। धन्यवाद एक और बार :) – ln2khanal

+1

ठीक है, इस विशिष्ट बिंदु पर, मुझे लगता है कि कोई दस्तावेज़ आपको मदद नहीं कर सकता था, हालांकि 'रीडायरेक्ट' फ़ंक्शन हस्ताक्षर को देखकर, यह देखते हुए कि यह 302 कोड भेजता है, आपको रास्ते में डाल सकता था। अन्यथा, 'फ्लास्क' एपीआई के संबंध में, आधिकारिक [दस्तावेज़ीकरण] (http://flask.pocoo.org/docs/) से बेहतर कुछ भी नहीं है। दूसरी तरफ, यदि आप अधिक गहराई से उदाहरण चाहते हैं, तो आप [द फ्लास्क मेगा-ट्यूटोरियल] देख सकते हैं (http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i- हैलो-वर्ल्ड) जो दिखाता है कि कई वास्तविक दुनिया के कार्यों को कैसे किया जाए। – MatToufoutu

+0

यदि आप अपने पोस्ट अनुरोध में डेटा भेज रहे हैं जिसे उस अन्य पृष्ठ पर रीडायरेक्ट करने की भी आवश्यकता है, तो 'request.form [""]' का उपयोग करके नए दृश्य के फ़ंक्शन में इसे एक्सेस करना सुनिश्चित करें, जहां संपत्ति का नाम है जो डेटा आप भेज रहे हैं, जैसे 'उपयोगकर्ता नाम'। – OzzyTheGiant