web-dev-qa-db-fra.com

Plusieurs paramètres dans l'itinéraire de l'application Flask

Comment écrire le flacon approute si j'ai plusieurs paramètres dans l'appel d'URL? 

Voici mon URL que j'appelle d'AJax

http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure

J'essayais d'écrire mon ballon comme ça. 

@app.route('/test/<summary,change> ,methods=['GET']

Mais ça ne fonctionne pas. Quelqu'un peut-il me suggérer comment mentionner l’approbation?

25
user2058205

Les autres réponses ont la bonne solution si vous voulez vraiment utiliser les paramètres de requête. Quelque chose comme:

@app.route('/createcm')
def createcm():
   summary  = request.args.get('summary', None)
   change  = request.args.get('change', None)

Quelques notes. Si vous devez uniquement prendre en charge les demandes GET, inutile d’inclure les méthodes dans votre décorateur d’itinéraires. 

Pour expliquer les paramètres de la requête. Tout au-delà du "?" dans votre exemple s'appelle un paramètre de requête. Flask extraira ces paramètres de requête de l'URL et les placera dans un ImmutableDict. Vous pouvez y accéder par request.args, soit avec la clé, c’est-à-dire request.args['summary'], soit avec la méthode get que certains commentateurs ont mentionnée. Cela vous donne la possibilité supplémentaire de lui attribuer une valeur par défaut (telle que Aucune), si elle n’est pas présente. Ceci est courant pour les paramètres de requête car ils sont souvent optionnels.

Maintenant, il y a une autre option que vous tentiez apparemment de faire dans votre exemple et qui consiste à utiliser un paramètre de chemin. Cela ressemblerait à:

@app.route('/createcm/<summary>/<change>')
def createcm(summary=None, change=None):
    ...

L'URL ici serait: http://0.0.0.0:8888/createcm/VVV/Feauure

Avec VVV et Feauure étant passés dans votre fonction en tant que variables. 

J'espère que cela pourra aider.

28
GMarsh

Les itinéraires ne correspondent pas à une chaîne de requête, qui est directement transmise à votre méthode.

from flask import request

@app.route('/createcm', methods=['GET'])
def foo():
   print request.args.get('summary')
   print request.args.get('change')
17
Burhan Khalid

Vous pouvez essayer ceci:

--- Demande de boucle ---

curl -i "localhost:5000/api/foo?a=hello&b=world"  

--- serveur de flacon ---

from flask import Flask, request

app = Flask(__name__)


@app.route('/api/foo/', methods=['GET'])
def foo():
    bar = request.args.to_dict()
    print bar
    return 'success', 200

if __== '__main__':   
    app.run(debug=True)

--- sortie de la console ---

{'a': u'hello', 'b': u'world'}

P.S. N'omettez pas les guillemets doubles ("") avec l'option curl, ou cela ne fonctionne pas sous Linux car "&"

11
Little Roys
@app.route('/createcm', methods=['GET'])
def foo():
    print request.args.get('summary')
    print request.args.get('change')
6
Peng Xiao

Vous mélangez les paramètres d'URL et l'URL elle-même.

Vous pouvez accéder aux paramètres d'URL avec request.args.get("summary") et request.args.get("change").

4
Anorov

Dans votre URL de requête: http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure, le noeud final est /createcm et ?summary=VVV&change=Feauure est args qui fait partie de la requête. afin que vous puissiez essayer ceci: 

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/createcm', methods=['get'])
def create_cm():
    summary = request.args.get('summary', None) # use default value repalce 'None'
    change = request.args.get('change', None)
    # do something, eg. return json response
    return jsonify({'summary': summary, 'change': change})


if __== '__main__':
    app.run(debug=True)

httpie examples:

http get :5000/createcm summary==vvv change==bbb -v
GET /createcm?summary=vvv&change=bbb HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: localhost:5000
User-Agent: HTTPie/0.9.8



HTTP/1.0 200 OK
Content-Length: 43
Content-Type: application/json
Date: Wed, 28 Dec 2016 01:11:23 GMT
Server: Werkzeug/0.11.13 Python/3.6.0

{
    "change": "bbb",
    "summary": "vvv"
}
1
Wei Huang

Nous pouvons simplement le faire en deux étapes: 1] Code en flacon [app.py]

from flask import Flask,request

app = Flask(__name__)

@app.route('/')
def index():
    return "hello"

@app.route('/admin',methods=['POST','GET'])
def checkDate():
    return 'From Date is'+request.args.get('from_date')+ ' To Date is '+ request.args.get('to_date')


if __name__=="__main__":
    app.run(port=5000,debug=True)

2] Hit URL dans le navigateur:

http://127.0.0.1:5000/admin?from_date=%222018-01-01%22&to_date=%222018-12-01%22
0
Viraj.Hadoop