2013-02-12 18 views
12

में एकाधिक डोमेन के साथ हैंडलिंग मैं फ्लास्क में संरचना को कार्यान्वित करना चाहता हूं, जो एकाधिक डोमेन को संभाल सकता है। तो जब मैं ब्राउज़र में "http://domain1.com/show/1" टाइप करें, यह वास्तव में समारोह की तरहफ्लास्क

@app.route('<string:domain>/show/<int:id>') 
def show(domain = '', id = ''): 
    return 'Domain is ' + domain + ', ID is ' + str(id) 

मार्ग के साथ निष्पादित करता है और यह बहुत महत्वपूर्ण है, ग्राहक के ब्राउज़र में URL अभी भी होना चाहिए "http://domain1.com/show/1"। और जैसा कि मुझे पता है, फ्लास्क में redirect का उपयोग करते समय, यह यूआरएल बदलता है। मुझे ऐसी संरचना कैसे व्यवस्थित करनी चाहिए? धन्यवाद!

उत्तर

21

request ऑब्जेक्ट में पहले से ही url_root पैरामीटर है। या फिर आप Host शीर्ष लेख का उपयोग कर सकते हैं:

print request.url_root # prints "http://domain1.com/" 
print request.headers['Host'] # prints "domain1.com" 

आप आवेदन के भीतर पुन: निर्देशित करने की जरूरत है, url_root, विशेषता को देखने के लिए है, क्योंकि यह WSGI आवेदन के लिए पूरा पथ, तब भी जब एक में निहित शामिल करेंगे गहरा पथ (उदाहरण के लिए http://domain1.com/path/to/flaskapp से शुरू)।

फ्लास्क आपके लिए एक यूआरएल उत्पन्न करने के लिए शायद request.url_for() का उपयोग करना बेहतर है; यह url_root खाते में ले जाएगा। URL Building दस्तावेज़ीकरण देखें।

+0

बिल्कुल सही और स्पष्ट निर्णय है, धन्यवाद! – user2065831

+0

वैसे, गतिशील रूप से एसईओ यूआरएल जोड़ने, डेटाबेस में स्टोर करने और मेरे आवेदन में मार्ग जोड़ने का सबसे अच्छा निर्णय क्या है? मुझे लगता है कि यह हर समय app.add_url_rule निष्पादित नहीं करना आसान और तेज़ हो सकता है। – user2065831

+0

उनमें एक पैटर्न खोजें और एक * एक * मार्ग उन सभी से मेल खाता है जो एक ही बार में जाते हैं? –

0

यहाँ कोड आयात के साथ कैसा दिखता है:

import flask 

print flask.request.url_root # prints "http://domain1.com/" 
print flask.request.headers['Host'] # prints "domain1.com"