2 votes

Flask redirigeant vers l'url en passant des paramètres à la fonction

Je suis nouveau dans Flask, et je suis coincé dans un programme très basique, qui accueille l'utilisateur avec 'Hello' suivi de son nom. J'ai écrit le code comme ci-dessous :

@app.route('/hello/')
def hello(name):
    return "Hello %s"% name

@app.route('/')
def greet():
    guest = "Mike"
    return redirect(url_for('hello',name=guest))

Dans ce cas, je veux imprimer "Hello Mike" sur l'url. "localhost:5000/hello" . Cependant, cela donne une erreur. Cette erreur est résolue en modifiant la ligne @app.route('/hello/') à @app.route('/hello/<name>') mais cela signifie que pour chaque utilisateur différent, il redirige vers une url différente.

Existe-t-il un moyen de faire en sorte que l'URL redirigée reste la même, c'est-à-dire qu'elle ne soit pas modifiée ? "localhost:5000/hello" mais la fonction hello(name) reçoit toujours l'argument ?

2voto

Ajax1234 Points 42210

Une possibilité est d'utiliser flask.session pour stocker le nom dans la fonction d'une route et le rendre accessible dans une autre :

import random, string
app.secret_key = ''.join(random.choice(string.ascii_letters) for _ in range(30)) 
#a secret key is required for flask.session

@app.route('/hello/')
def hello():
  return f'Hello {flask.session["guest"]}'

@app.route('/')
def greet():
   flask.session['guest'] = 'Mike'
   return flask.redirect('/hello')

Ainsi, lorsque l'utilisateur navigue vers localhost:5000 , "Mike" est défini comme le nom dans les sessions, et quand l'utilisateur est redirigé vers localhost:5000/hello la valeur du nom est accessible à partir des sessions et affichée à l'écran.

Cette méthode peut également être utilisée avec POST requêtes : lorsqu'un utilisateur soumet un formulaire sur le front-end, la route cible peut stocker le nom de l'invité en tant que valeur d'entrée du formulaire et ensuite simplement rediriger :

 @app.route('/some_form_route', methods=['POST'])
 def greet():
   flask.session['guest'] = flask.request['name']
   return flask.redirect('/hello')

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