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

1170voto

Kracekumar Punkte 17881
from flask import request

@app.route('/data')
def data():
    # here we want to get the value of user (i.e. ?user=some-value)
    user = request.args.get('user')

330voto

Lyndsy Simon Punkte 4988

Die vollständige URL ist verfügbar unter request.url und der Abfrage-String ist verfügbar als request.query_string.decode() .

Hier ist ein Beispiel:

from flask import request

@app.route('/adhoc_test/')
def adhoc_test():

    return request.query_string

Um auf einen einzelnen bekannten Parameter zuzugreifen, der im Abfrage-String übergeben wurde, können Sie request.args.get('param') . Soweit ich weiß, ist dies der "richtige" Weg.

ETA: Bevor Sie weitermachen, sollten Sie sich fragen, warum Sie die Abfragezeichenfolge benötigen. Ich musste noch nie den rohen String abrufen - Flask hat Mechanismen, um auf ihn in einer abstrahierten Weise zuzugreifen. Sie sollten diese verwenden, es sei denn, Sie haben einen zwingenden Grund, dies nicht zu tun.

25voto

Michael Ribbons Punkte 1447

Ich bin hierher gekommen, um die Abfragezeichenfolge zu suchen, nicht um zu erfahren, wie man Werte aus der Abfragezeichenfolge erhält.

request.query_string gibt die URL-Parameter als rohen Byte-String zurück (Ref. 1).

Beispiel für die Verwendung request.query_string :

from flask import Flask, request

app = Flask(__name__)

@app.route('/data', methods=['GET'])
def get_query_string():
    return request.query_string

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

Ausgabe:

query parameters in Flask route

Referenzen:

  1. Offizielle API-Dokumentation zu query_string

22voto

Wir können dies durch die Verwendung von request.query_string erreichen.

Beispiel:

Betrachten wir view.py

from my_script import get_url_params

@app.route('/web_url/', methods=('get', 'post'))
def get_url_params_index():
    return Response(get_url_params())

Durch die Verwendung von Flask Blueprints wird das Ganze noch modularer. https://flask.palletsprojects.com/en/1.1.x/blueprints/

Nehmen wir an, der Vorname wird als Teil des Abfrage-Strings übergeben /web_url/?first_name=john

## here is my_script.py

## import required flask packages
from flask import request
def get_url_params():
    ## you might further need to format the URL params through escape.    
    firstName = request.args.get('first_name') 
    return firstName

Wie Sie sehen, ist dies nur ein kleines Beispiel - Sie können mehrere Werte abrufen, diese formatieren und verwenden oder an die Vorlagendatei weitergeben.

17voto

Simon Sapin Punkte 9332

Werkzeug/Flask hat bereits alles für Sie geparst. Sie müssen die gleiche Arbeit nicht noch einmal mit urlparse machen:

from flask import request

@app.route('/')
@app.route('/data')
def data():
    query_string = request.query_string  ## There is it
    return render_template("data.html")

Die vollständige Dokumentation zu den Request- und Response-Objekten finden Sie in Werkzeug: http://werkzeug.pocoo.org/docs/wrappers/

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