मैं एक फ्लास्क अनुरोध के यूआरएल के विभिन्न भागों को कैसे प्राप्त करूं?


144

मैं यह पता लगाना चाहता हूं कि अनुरोध localhost:5000या foo.herokuapp.comमेजबान से आया था और क्या रास्ता अनुरोध किया गया था। फ्लास्क अनुरोध के बारे में मुझे यह जानकारी कैसे मिलेगी?

जवाबों:


235

आप कई Requestक्षेत्रों के माध्यम से url की जाँच कर सकते हैं :

एक उपयोगकर्ता निम्नलिखित URL का अनुरोध करता है:

    http://www.example.com/myapplication/page.html?x=y

इस मामले में उपरोक्त विशेषताओं के मूल्य निम्न होंगे:

    path             /page.html
    script_root      /myapplication
    base_url         http://www.example.com/myapplication/page.html
    url              http://www.example.com/myapplication/page.html?x=y
    url_root         http://www.example.com/myapplication/

आप आसानी से उपयुक्त विभाजन के साथ मेजबान भाग को निकाल सकते हैं।


5
मैं पाने की कोशिश कर रहा हूं Request.root_urlऔर वापसी के रूप में मैं केवल <werkzeug.utils.cached_property object>अच्छी तरह से स्वरूपित के बजाय मिलता हूं http://www.example.com/myapplication/। या यह फीचर लोकलहोस्ट पर काम नहीं करता है?
वादिम

4
@Vadim आपको request.root_url का उपयोग करना चाहिए, Request.root_url का नहीं।
आत्मबूट

1
फ्लास्क के लिए नया, मुझे नहीं पता था कि अनुरोध वस्तु कहाँ से आती है और यह कैसे काम करती है, यहाँ यह है: flask.pocoo.org/docs/0.12/reqcontext
Ulysse BN

3
request.url_root मेरे लिए काम करता है, जबकि request.root_url और Request.root_url विफल रहता है। इसलिए, टोपी 'आर' के लिए देखें और url_root बनाम root_url
zerocog

url_root रिटर्न http://www.example.com/नहीं http://www.example.com/myapplication/ base_url रिटर्नhttp://www.example.com/myapplication/
moto

171

एक और उदाहरण:

निवेदन:

curl -XGET http://127.0.0.1:5000/alert/dingding/test?x=y

फिर:

request.method:              GET
request.url:                 http://127.0.0.1:5000/alert/dingding/test?x=y
request.base_url:            http://127.0.0.1:5000/alert/dingding/test
request.url_charset:         utf-8
request.url_root:            http://127.0.0.1:5000/
str(request.url_rule):       /alert/dingding/test
request.host_url:            http://127.0.0.1:5000/
request.host:                127.0.0.1:5000
request.script_root:
request.path:                /alert/dingding/test
request.full_path:           /alert/dingding/test?x=y

request.args:                ImmutableMultiDict([('x', 'y')])
request.args.get('x'):       y

4
यह स्वीकृत उत्तर होना चाहिए, क्योंकि इसमें इसका बहुत अधिक विवरण है।
pfabri

1
यह एक बेहतरीन जवाब है। बहुत उपयोगी और पूर्ण।
ताओ स्टारबो

10

तुम्हें कोशिश करनी चाहिए:

request.url 

यह हमेशा काम करने के लिए लगता है, यहां तक ​​कि लोकलहोस्ट (बस यह किया गया) पर।


1

यदि आप पायथन का उपयोग कर रहे हैं, तो मैं अनुरोध वस्तु की खोज करके सुझाव दूंगा:

dir(request)

वस्तु के बाद विधि का समर्थन dict :

request.__dict__

इसे प्रिंट या सेव किया जा सकता है। मैं इसका उपयोग फ्लास्क में 404 कोड लॉग करने के लिए करता हूं:

@app.errorhandler(404)
def not_found(e):
    with open("./404.csv", "a") as f:
        f.write(f'{datetime.datetime.now()},{request.__dict__}\n')
    return send_file('static/images/Darknet-404-Page-Concept.png', mimetype='image/png')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.