Bir Flask isteğinin URL'sinin farklı bölümlerini nasıl edinebilirim?


144

İsteğin localhost:5000veya foo.herokuapp.comana bilgisayardan gelip gelmediğini ve hangi yolun istendiğini tespit etmek istiyorum . Bir Flask isteği hakkında bu bilgiyi nasıl alabilirim?

Yanıtlar:


236

URL'yi çeşitli Requestalanlarda inceleyebilirsiniz :

Bir kullanıcı aşağıdaki URL'yi ister:

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

Bu durumda, yukarıda belirtilen özelliklerin değerleri aşağıdaki gibi olacaktır:

    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/

Ana makine parçasını uygun bölmelerle kolayca çıkarabilirsiniz.


5
Ben almaya çalışıyorum Request.root_urlve dönüş olarak sadece <werkzeug.utils.cached_property object>yerine güzel biçimlendirilmiş olsun http://www.example.com/myapplication/. Yoksa bu özellik localhost üzerinde çalışmıyor mu?
Vadim

4
@Vadim Request.root_url değil request.root_url kullanmalısınız.
selfboot

1
Flask için yeni, istek nesnesinin nereden geldiğini ve nasıl çalıştığını bilmiyordum, işte burada: flask.pocoo.org/docs/0.12/reqcontext
Ulysse BN

3
request.url_root benim için çalışır, oysa request.root_url ve Request.root_url başarısız olur. Bu nedenle, root_url'a karşı 'R' ve url_root kapağını izleyin
zerocog

url_root döner http://www.example.com/değil http://www.example.com/myapplication/ base_url dönerhttp://www.example.com/myapplication/
moto

171

başka bir örnek:

istek:

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

sonra:

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
Çok daha fazla ayrıntıya sahip olduğu için bu kabul edilen cevap olmalıdır.
pfabri

1
Bu harika bir cevap. Çok kullanışlı ve eksiksiz.
Tao Starbow

10

denemelisin:

request.url 

Her zaman, hatta localhost üzerinde bile çalıştığını varsayalım (sadece yaptı).


1

Python kullanıyorsanız, istek nesnesini keşfederek öneririm:

dir(request)

Nesne yana yöntem destek dicti :

request.__dict__

Yazdırılabilir veya kaydedilebilir. Ben Flask 404 kodları giriş için kullanın:

@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')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.