Wie schreibe ich die Flasche approute, wenn der URL-Aufruf mehrere Parameter enthält?
Hier ist meine URL, die ich von AJax aus anrufe
http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure
Ich habe versucht, meine Flasche so zu schreiben.
@app.route('/test/<summary,change> ,methods=['GET']
Das funktioniert aber nicht. Kann mir jemand vorschlagen, wie ich die Approute erwähnen soll?
Die anderen Antworten haben die richtige Lösung, wenn Sie tatsächlich Abfrageparameter verwenden möchten. So etwas wie:
@app.route('/createcm')
def createcm():
summary = request.args.get('summary', None)
change = request.args.get('change', None)
Ein paar Notizen. Wenn Sie nur GET-Anforderungen unterstützen müssen, müssen Sie die Methoden nicht in Ihren Routendekorateur aufnehmen.
Um die Abfrageparameter zu erklären. Alles außerhalb des "?" In Ihrem Beispiel heißt das Abfrageparameter. Flask nimmt diese Abfrageparameter aus der URL heraus und platziert sie in einem ImmutableDict. Sie können darauf mit request.args
zugreifen, entweder mit dem Schlüssel, dh request.args['summary']
oder mit der get-Methode, die ich und einige andere Kommentatoren erwähnt haben. Dadurch können Sie ihm einen Standardwert zuweisen (z. B. "None"), falls er nicht vorhanden ist. Dies ist bei Abfrageparametern üblich, da sie häufig optional sind.
Nun gibt es eine andere Option, die Sie anscheinend in Ihrem Beispiel versucht haben, nämlich die Verwendung eines Path-Parameters. Das würde so aussehen:
@app.route('/createcm/<summary>/<change>')
def createcm(summary=None, change=None):
...
Die URL wäre hier: http://0.0.0.0:8888/createcm/VVV/Feauure
VVV und Feauure werden als Variablen in Ihre Funktion übernommen.
Hoffentlich hilft das.
Routen stimmen nicht mit einer Abfragezeichenfolge überein, die direkt an Ihre Methode übergeben wird.
from flask import request
@app.route('/createcm', methods=['GET'])
def foo():
print request.args.get('summary')
print request.args.get('change')
Sie können dies versuchen:
--- Curl-Anfrage ---
curl -i "localhost:5000/api/foo?a=hello&b=world"
--- Flask Server ---
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)
--- Konsolenausgabe ---
{'a': u'hello', 'b': u'world'}
P.S. Lassen Sie das doppelte Anführungszeichen ("") mit der curl-Option nicht aus, oder es funktioniert nicht in Linux, da "&"
@app.route('/createcm', methods=['GET'])
def foo():
print request.args.get('summary')
print request.args.get('change')
Sie mischen die URL-Parameter und die URL selbst.
Zugriff auf die URL-Parameter erhalten Sie mit request.args.get("summary")
und request.args.get("change")
.
In Ihrer anfragenden URL: http://0.0.0.0:8888/createcm?summary=VVV&change=Feauure
ist der Endpunkt /createcm
und ?summary=VVV&change=Feauure
ist args
Teil der Anforderung. so kannst du es versuchen:
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
Beispiele:
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"
}
Wir können dies einfach in zwei Schritten tun: 1] Code in flask [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] Klicken Sie im Browser auf die URL:
http://127.0.0.1:5000/admin?from_date=%222018-01-01%22&to_date=%222018-12-01%22