Dans Flask, lorsque j'ai plusieurs itinéraires pour la même fonction, comment savoir quel itinéraire est actuellement utilisé?
Par exemple:
@app.route("/antitop/")
@app.route("/top/")
@requires_auth
def show_top():
....
Comment puis-je savoir que maintenant on m'a appelé en utilisant /top/
ou /antitop/
?
MISE À JOUR
Je connais request_path
Je ne veux pas l'utiliser, car la requête peut être assez complexe, et je veux répéter la logique de routage dans la fonction. Je pense que la solution avec url_rule
c'est le meilleur.
la façon la plus "flasque" de vérifier quel itinéraire a déclenché votre vue est, par request.url_rule
.
from flask import request
rule = request.url_rule
if 'antitop' in rule.rule:
# request by '/antitop'
Elif 'top' in rule.rule:
# request by '/top'
Une autre option consiste à utiliser la variable de noeud final:
@app.route("/api/v1/generate_data", methods=['POST'], endpoint='v1')
@app.route("/api/v2/generate_data", methods=['POST'], endpoint='v2')
def generate_data():
version = request.endpoint
return version
Si vous souhaitez un comportement différent pour chaque route, la bonne chose à faire est de créer deux gestionnaires de fonctions.
@app.route("/antitop/")
@requires_auth
def top():
...
@app.route("/top/")
@requires_auth
def anti_top():
...
Dans certains cas, votre structure est logique. Vous pouvez définir des valeurs par itinéraire.
@app.route("/antitop/", defaults={'_route': 'antitop'})
@app.route("/top/", defaults={'_route': 'top'})
@requires_auth
def show_top(_route):
# use _route here
...
Il me semble que si vous avez une situation où cela importe, vous ne devriez pas utiliser la même fonction en premier lieu. Divisez-le en deux gestionnaires distincts, qui appellent chacun une fiction commune pour le code partagé.