wake-up-neo.com

Mehrere Parameter in Flask App Route

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?

25
user2058205

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.

28
GMarsh

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')
17
Burhan Khalid

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 "&"

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

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").

4
Anorov

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"
}
1
Wei Huang

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
0
Viraj.Hadoop