2010-06-14 10 views
10

मैं Google के ऐप इंजन के साथ Django का उपयोग कर रहा हूं।मैं ऐप इंजन पर Django के साथ प्रतिशत एन्कोडेड स्लैश कैसे प्राप्त कर सकता हूं?

मैं सर्वर को जानकारी एनकोडेड स्लैश के साथ भेजना चाहता हूं। http:/localhost/turtle/waxy%2Fsmooth जैसे अनुरोध जो r'^/turtle/(?P<type>([A-Za-z]|%2F)+)$' जैसे यूआरएल के खिलाफ मेल खाते हैं। अनुरोध सर्वर पर बरकरार हो जाता है, लेकिन रेगेक्स के खिलाफ इसकी तुलना करने से कुछ समय पहले% 2F को फॉरवर्ड स्लैश में परिवर्तित किया जाता है।

% 2Fs को आगे की स्लैश में परिवर्तित होने से रोकने के लिए मैं क्या कर सकता हूं? धन्यवाद!

+2

गैर-एन्कोडेड संस्करण का उपयोग करने के लिए आप केवल regexp क्यों नहीं बदल सकते हैं? –

+3

हम एक विश्वसनीय डिजाइन का उपयोग कर रहे हैं और अन्य regexes हैं जो 'आर' ^/कछुए/(? पी ([ए-ज़ा-जेड] |% 2 एफ) +)/खोल $ ''की तरह दिखते हैं। हम उन स्लैश के बीच अंतर करना चाहते हैं जो यूआरएल पदानुक्रम और स्लैश का हिस्सा हैं जो कछुए के नाम का हिस्सा हैं। –

+1

मैं इसे अपनी आवश्यकताओं की सूची में जोड़ दूंगा जो मैं उम्मीदवार पायथन वेब ढांचे का मूल्यांकन करते समय उपयोग करता हूं। –

उत्तर

3

os.environ['PATH_INFO'] डीकोड किया गया है, इसलिए आप उस जानकारी को खो देते हैं। शायद os.environ['REQUEST_URI'] उपलब्ध है, और यदि यह उपलब्ध है तो यह डीकोड नहीं किया गया है। Django केवल PATH_INFO पढ़ता है।

request_uri = environ['REQUEST_URI'] 
request_uri = re.sub(r'%2f', '****', request_uri, re.I) 
environ['PATH_INFO'] = urllib.unquote(request_uri) 

तब% 2f के सभी मामलों **** (या जो भी आप उपयोग करना चाहते) से बदल रहे हैं: आप शायद की तरह कुछ कर सकता है।

+0

REQUEST_URI क्या सेट करता है? मैं इसे पेप 333 की आवश्यक wsgi चर सूची में नहीं देखता हूं। –

+0

पीईपी 333 में इसकी आवश्यकता नहीं है, लेकिन यह व्यापक रूप से सीजीआई (या सीजीआई-जैसे) अनुरोधों के हिस्से के रूप में सेट है। जीएई पर यदि यह मौजूद है, तो मौजूदा रखना जारी रखना निश्चित है। यह पूरा अनुरोध पथ है, जिसमें यूआरएल अनएकोडिंग नहीं किया गया है। –

+2

'os.environ ['REQUEST_URI']' GAE पर उपलब्ध नहीं है। –

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

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