Flacon/Werkzeug, comment faire pour retourner la page précédente après le login
Je suis à l'aide de la Fiole micro-framework qui est basé sur Werkzeug, qui utilise Python.
Avant chaque restreinte page, il y a un décorateur pour s'assurer que l'utilisateur est connecté, actuellement de les retourner à la page de connexion s'ils ne sont pas connectés, comme suit:
# Decorator
def logged_in(f):
@wraps(f)
def decorated_function(*args, **kwargs):
try:
if not session['logged_in']:
flash('Please log in first...', 'error')
return redirect(url_for('login'))
else:
return f(*args, **kwargs)
except KeyError:
flash('Please log in first...', 'error')
return redirect(url_for('login'))
return decorated_function
# Login function
@app.route('/', methods=['GET', 'POST'])
def login():
"""Login page."""
if request.method=='POST':
### Checks database, etc. ###
return render_template('login.jinja2')
# Example 'restricted' page
@app.route('/download_file')
@logged_in
def download_file():
"""Function used to send files for download to user."""
fileid = request.args.get('id', 0)
### ... ###
Après la connexion, il doit renvoyer les utilisateurs vers la page qui leur a pris à la page de connexion.
Il doit également conserver les choses telles que le passé variables (c'est à dire l'ensemble de la liaison de coeur www.example.com/download_file?id=3 )
Personne ne sait comment faire cela?
Merci pour votre aide 🙂
Vous devez vous connecter pour publier un commentaire.
Je pense que la pratique standard consiste à ajouter l'URL vers laquelle l'utilisateur doit être redirigé après une connexion réussie à la fin de l'URL de connexion de la chaîne de requête.
Vous changeriez votre décorateur à quelque chose comme ceci (avec des redondances dans votre fonction décorateur également supprimé):
Vous aurez à les remplacer par quelque chose de
get_current_url()
, parce que je ne sais pas comment c'est fait dans le Flacon.Puis, dans votre gestionnaire de connexion, lorsque l'utilisateur se connecte avec succès dans, vous de vérifier pour voir si il y a un
next
paramètre dans la requête et, le cas échéant, vous rediriger vers cette URL. Sinon, vous rediriger vers certains d'URL par défaut (généralement/
, je suppose).Vous pouvez utiliser une chaîne de requête de garder le fichier info intacte au cours d'un clic ou deux. Une des belles choses au sujet de
url_for
est de savoir comment il passe les paramètres inconnus comme les chaînes de requête. Ainsi, sans changer votre page d'inscription trop, vous pourriez faire quelque chose comme ceci:Ici
wantsurl
permettra de suivre l'url que l'utilisateur a atterri sur. Si un utilisateur non enregistré va à/download/some/file.txt
,login_required
va vous envoyer à/register?wantsurl=%2Fdownload%2Fsome%2Ffile.txt
Ensuite, vous ajoutez les deux lignes à votre fonction d'enregistrement:Qui serait automatiquement rediriger vers la télécharger sur le succès de l'enregistrement, à condition d'avoir quelque chose dans la forme appelée "wantsurl" avec la valeur de
qs
, ou vous pourriez avoir votre formulaire de soumission avec une chaîne de requête; ce pourrait juste être un peu si-sinon dans le modèle.