web-dev-qa-db-fra.com

Comment puis-je obtenir les paramètres nommés à partir d'une URL en utilisant Flask?

Lorsque l'utilisateur accède à cette URL s'exécutant sur mon application flask, je souhaite que le service Web puisse gérer les paramètres spécifiés après le point d'interrogation:

http://10.1.1.1:5000/login?username=alex&password=pw1

#I just want to be able to manipulate the parameters
@app.route('/login', methods=['GET', 'POST'])
def login():
    username = request.form['username']
    print(username)
    password = request.form['password']
    print(password)
273
Alex Stone

Utilisez request.args pour obtenir le contenu analysé de la chaîne de requête:

_from flask import request

@app.route(...)
def login():
    username = request.args.get('username')
    password = request.args.get('password')
_
460
falsetru

Les paramètres d'URL sont disponibles dans request.args , qui est un MultiDict qui possède une méthode get, avec des paramètres facultatifs pour la valeur par défaut (default) et tapez (type) - qui est un appelable qui convertit la valeur d'entrée au format souhaité.

_from flask import request

@app.route('/my-route')
def my_route():
  page = request.args.get('page', default = 1, type = int)
  filter = request.args.get('filter', default = '*', type = str)
_

Exemples avec le code ci-dessus:

_/my-route?page=34               -> page: 34  filter: '*'
/my-route                       -> page:  1  filter: '*'
/my-route?page=10&filter=test   -> page: 10  filter: 'test'
/my-route?page=10&filter=10     -> page: 10  filter: '10'
/my-route?page=*&filter=*       -> page:  1  filter: '*'
_
90
qqbenq

Vous pouvez également utiliser des crochets <> sur l'URL de la définition de vue et cette entrée ira dans les arguments de votre fonction de vue

@app.route('/<name>')
def my_view_func(name):
    return name
43
Inbar Cheffer

Si vous avez un seul argument passé dans l'URL, vous pouvez le faire comme suit

from flask import request
#url
http://10.1.1.1:5000/login/alex

from flask import request
@app.route('/login/<username>', methods=['GET'])
def login(username):
    print(username)

Si vous avez plusieurs paramètres:

#url
http://10.1.1.1:5000/login?username=alex&password=pw1

from flask import request
@app.route('/login', methods=['GET'])
    def login():
        username = request.args.get('username')
        print(username)
        password= request.args.get('password')
        print(password)

Ce que vous tentiez de faire fonctionne dans le cas de POST requêtes dans lesquelles les paramètres sont transmis en tant que paramètres de formulaire et n'apparaissent pas dans l'URL. Si vous développez réellement une API de connexion, il est conseillé d'utiliser POST request plutôt que GET et d'exposer les données à l'utilisateur.

En cas de demande de poste, cela fonctionnerait comme suit:

#url
http://10.1.1.1:5000/login

Extrait HTML:

<form action="http://10.1.1.1:5000/login">
  Username : <input type="text" name="username"><br>
  Password : <input type="password" name="password"><br>
  <input type="submit" value="submit">
</form>

Route:

from flask import request
@app.route('/login', methods=['POST'])
    def login():
        username = request.form.get('username')
        print(username)
        password= request.form.get('password')
        print(password)
23
Suchita Mukherjee

uRL:

http://0.0.0.0:5000/user/name/

code:

@app.route('/user/< string:name >/', methods=['GET', 'POST'])
def user_view(name):
    print(name)
4
Manish Sharma

C'est vraiment simple. Permettez-moi de diviser ce processus en deux étapes simples.

  1. Sur le modèle html, vous déclarerez la balise name pour username et password comme

    <form method="POST">
    <input type="text" name="user_name"></input>
    <input type="text" name="password"></input>
    </form>
    
  2. Ensuite, modifiez votre code en tant que:

    from flask import request
    
    @app.route('/my-route', methods=['POST']) #you should always parse username and 
    # password in a POST method not GET
    def my_route():
      username = request.form.get("user_name")
      print(username)
      password = request.form.get("password")
      print(password)
    #now manipulate the username and password variables as you wish
    #Tip: define another method instead of methods=['GET','POST'], if you want to  
    # render the same template with a GET request too
    
0
Mr.bunty