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)
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')
_
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: '*'
_
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
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)
uRL:
http://0.0.0.0:5000/user/name/
code:
@app.route('/user/< string:name >/', methods=['GET', 'POST'])
def user_view(name):
print(name)
C'est vraiment simple. Permettez-moi de diviser ce processus en deux étapes simples.
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>
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