202 votes

Comment puis-je obtenir les différentes parties de l'url d'une requête Flask ?

Je veux détecter si la requête provient de l' localhost:5000 o foo.herokuapp.com et quel chemin a été demandé. Comment puis-je obtenir ces informations sur une requête Flask ?

315voto

icecrime Points 23650

Vous pouvez examiner l'url à travers plusieurs Request champs :

Imaginez que votre application écoute sur l'application Root suivante :

http://www.example.com/myapplication

Et un utilisateur demande l'URI suivant :

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

Dans ce cas, les valeurs des attributs mentionnés ci-dessus seraient les suivantes :

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

Vous pouvez facilement extraire la partie hôte avec les fractionnements appropriés.

292voto

chason Points 2444

Un autre exemple :

demande :

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

alors :

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

12voto

Ran Points 145

Vous devriez essayer :

request.url 

Il est supposé fonctionner toujours, même sur localhost (je viens de le faire).

1voto

Antonio Points 51

Si vous utilisez Python, je vous suggère d'explorer l'objet de requête :

dir(request)

Puisque l'objet supporte la méthode dict :

request.__dict__

Il peut être imprimé ou sauvegardé. Je l'utilise pour enregistrer les codes 404 dans Flask :

@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')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X