ফ্লাস্কের অনুরোধের ইউআরএলের বিভিন্ন অংশগুলি কীভাবে পাব?


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
@ ভাদিম আপনার অনুরোধ.রোট_আর্ল ব্যবহার করা উচিত, অনুরোধ.রোট_ুরল নয়।
সেলফুট

1
ফ্লাস্কে নতুন, আমি জানতাম না যে অনুরোধের বস্তুটি কোথা থেকে এসেছে এবং এটি কীভাবে কাজ করে, এটি এখানে: flask.pocoo.org/docs/0.12/reqcontext
ইউলিস বিএন ২

3
অনুরোধ.url_root আমার পক্ষে কাজ করে, যদিও অনুরোধ.রোট_আরল এবং অনুরোধ.রোট_আরল ব্যর্থ। অতএব, ক্যাপ 'আর' এবং url_root বনাম রুট_রল দেখুন

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)

যেহেতু বস্তুটি পদ্ধতি ডিককে সমর্থন করে :

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')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.