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?
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.
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')
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 "&"
@app.route('/createcm', methods=['GET'])
def foo():
print request.args.get('summary')
print request.args.get('change')
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")
.
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"
}
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