648 Stimmen

Wie greift man auf den Query-String in Flask-Routen zu?

Wie greifen Sie auf Abfrageparameter oder den Abfrage-String in Flask-Routen zu? Das ist aus der Flask-Dokumentation nicht ersichtlich.

Die Beispielroute /data unten zeigt den Kontext, in dem ich auf diese Daten zugreifen möchte. Wenn jemand etwas anfordert wie example.com/data?abc=123 Ich möchte Zugriff auf die Zeichenfolge ?abc=123 oder die Möglichkeit, den Wert von Parametern wie abc .

@app.route("/data")
def data():
    # query_string = ???
    return render_template("data.html")

12voto

Sankar guru Punkte 838

Versuchen Sie dies für die Abfragezeichenfolge:

from flask import Flask, request

app = Flask(__name__)

@app.route('/parameters', methods=['GET'])
def query_strings():

    args1 = request.args['args1']
    args2 = request.args['args2']
    args3 = request.args['args3']

    return '''<h1>The Query String are...{}:{}:{}</h1>''' .format(args1,args2,args3)

if __name__ == '__main__':

    app.run(debug=True)

Ausgabe: enter image description here

7voto

23r0c001 Punkte 121

Jede Form des Abfrage-Strings, der vom Flask-Request-Objekt abgerufen werden kann, wie in O'Reilly Flask Web-Entwicklung :

Von O'Reilly Flask Web-Entwicklung und wie bereits von Manan Gouhari erwähnt, müssen Sie zunächst einen Antrag importieren:

from flask import request

request ist ein Objekt, das von Flask als eine Kontextvariable mit dem Namen (Sie haben es erraten) request . Wie der Name schon sagt, enthält es tous die Informationen, die der Client in die HTTP-Anfrage aufgenommen hat. Dieses Objekt hat viele Attribute und Methoden, die Sie abrufen bzw. aufrufen können.

Sie haben eine ganze Reihe von request Attribute, die die Abfragezeichenfolge enthalten, aus der ausgewählt werden soll. Hier werde ich jedes Attribut auflisten, das in irgendeiner Weise den Abfrage-String enthält, sowie eine Beschreibung dieses Attributs aus dem O'Reilly-Buch.

Erstens gibt es args ein Wörterbuch mit allen Argumenten, die im Query-String der URL übergeben werden". Wenn Sie also wollen, dass die Abfragezeichenfolge in ein Wörterbuch geparst wird, müssen Sie etwas wie folgt tun:

from flask import request

@app.route('/'):
    queryStringDict = request.args

_(Wie bereits von anderen erwähnt, können Sie auch .get('<arg_name>') um einen bestimmten Wert aus dem Wörterbuch zu erhalten)_

Dann gibt es noch die form Attribut, das die pas die Abfragezeichenfolge enthalten, die aber in einem anderen Attribut enthalten ist, das fait die Abfragezeichenfolge enthalten, die ich gleich auflisten werde. Aber zuerst, form ist "Ein Wörterbuch mit allen Formularfeldern, die mit der Anfrage übermittelt wurden". Ich sage das, um Folgendes zu sagen: Es gibt ein weiteres Wörterbuch-Attribut im Flask-Anfrageobjekt namens values . values ist "Ein Wörterbuch, das die Werte in form y args ." Das Abrufen dieser Daten würde etwa so aussehen:

from flask import request

@app.route('/'):
    formFieldsAndQueryStringDict = request.values

_(Auch hier gilt .get('<arg_name>') um ein bestimmtes Element aus dem Wörterbuch zu holen)_

Eine weitere Möglichkeit ist query_string das ist "Der Abfrage-String-Teil der URL als roher Binärwert". Beispiel dafür:

from flask import request

@app.route('/'):
    queryStringRaw = request.query_string

Und als zusätzlichen Bonus gibt es full_path das heißt "Die Pfad- und Abfrage-String-Teile der URL". Por ejemplo:

from flask import request

@app.route('/'):
    pathWithQueryString = request.full_path

Und schließlich, url Die vollständige vom Client angeforderte URL" (einschließlich der Abfragezeichenfolge):

from flask import request

@app.route('/'):
    pathWithQueryString = request.url

Viel Spaß beim Hacken :)

6voto

mightbesimon Punkte 350

Ich bevorzuge

user = request.args['user'] if 'user' in request.args else 'guest'

über

user = request.args.get('user')

Auf diese Weise können Sie zuerst überprüfen, ob die URL tatsächlich den Abfrage-String enthält

4voto

Mark Kortink Punkte 1332

Oft wollen wir nur die gesamte Abfragezeichenfolge in eine geeignete Python-Datenstruktur abbilden und sie von dort übernehmen. Die geeignete Struktur ist ein Multi-Wörterbuch, weil sich Schlüsselwörter wiederholen können, zum Beispiel müssen wir mit A=123&A=456&B=789 . Ein Multi-Dictionary ist eine Liste von 2-Tupeln, wobei jedes 2-Tupel den Schlüssel als erstes Element und die Liste der Werte als zweites Element enthält. [('A',['123','456']),('B',['789'])] . All dies wird erreicht durch

qstr = request.args.lists() # A generator for the multi-dict
qstr = list(qstr) # To get the actual multi-dict

Wenn Sie nur ein Wörterbuch benötigen, in dem das erste Vorkommen eines doppelten Schlüsselworts verwendet wird, können Sie einfach

qstr = request.args.to_dict()

3voto

Gbenga Fabikun Punkte 31

Die folgende Implementierung hat bei mir funktioniert.

from flask import request
def getVerificationStatus():
try:
    requestId=int(request.args.get('requestId'))
    print(requestId)
    status= verificationStepRepository.getVerificationStatus(requestId)
    return tb.responsify(200, "success", status)
except Exception as e:
    return errorHandler.dispatchInternalServerError(str(e))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X