Wie erhält man eine Abfragezeichenfolge für Flask?

406

Aus der Kolbendokumentation nicht ersichtlich, wie die Abfragezeichenfolge abgerufen wird. Ich bin neu, habe mir die Dokumente angesehen, konnte nicht finden!

Damit

@app.route('/')
@app.route('/data')
def data():
    query_string=??????
    return render_template("data.html")
Tampa
quelle
11
Es ist in der Dokumentation unter Schnellstart: flask.pocoo.org/docs/quickstart/#the-request-object
Jarus
Der Begriff "Abfragezeichenfolge" wird jedoch nicht verwendet. Es nennt sie nur Parameter. > Um auf Parameter zuzugreifen, die in der URL (? Key = value) übermittelt wurden, können Sie das Attribut args verwenden: >> searchword = request.args.get ('key', '')
Ion Freeman

Antworten:

776
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')
Kracekumar
quelle
69
In diesem Beispiel wird der Wert des Parameters "user" zurückgegeben, der in der Abfragezeichenfolge übergeben wurde, nicht die Abfragezeichenfolge selbst. "Abfragezeichenfolge" bedeutet alles nach dem Fragezeichen und vor dem Nummernzeichen, falls vorhanden.
Lyndsy Simon
45
Dennoch ist eine nützliche Antwort zu bedenken, dass sie mit der Frage zusammenhängt. Also gültig und +1
Necronet
8
Nein - wie bei einem Diktat und .get erhalten Sie einfach None.
JPEG_
5
@ LyndsySimon: Gut gesehen. Aber da diese Antwort die Frage, auf die meine Google-Suchbegriffe anspielten ("Flask Get Request Parameter"), richtig beantwortet, stimme ich trotzdem zu. Ich bin auch ein Pedant, aber ich schreibe das auf Web-Mystik. 😉
Michael Scheper
5
Kein Argument von mir! Meine Kommentare zu dieser Frage waren eine ständige Quelle für SO-Punkte und allgemeines Karma. :) Viel Spaß beim Hacken!
Lyndsy Simon
237

Die vollständige URL ist verfügbar als request.urlund die Abfragezeichenfolge ist verfügbar als request.query_string.

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 in der Abfragezeichenfolge übergeben wurde, können Sie verwenden request.args.get('param'). Soweit ich weiß, ist dies der "richtige" Weg, dies zu tun.

ETA: Bevor Sie fortfahren, sollten Sie sich fragen, warum Sie die Abfragezeichenfolge möchten. Ich musste noch nie an der rohen Schnur ziehen - Flask verfügt über Mechanismen, um auf abstrahierte Weise darauf zuzugreifen. Sie sollten diese verwenden, es sei denn, Sie haben einen zwingenden Grund, dies nicht zu tun.

Lyndsy Simon
quelle
11
+1 für die richtige Antwort. OAuth-Flows wie Dropbox fragen regelmäßig nach Umleitungs-URLs, an die Token übergeben werden sollen. Es ist durchaus sinnvoll, die Abfragezeichenfolge selbst zu analysieren.
Richard Løvehjerte
Ein virtuelles -1 für die falsche Antwort 😉. Obwohl es buchstäblich korrekt ist, liefert es nicht das, wonach das OP gesucht hat, was die akzeptierte Antwort tut. DWIM FTW. Gut gespielt als SO-Punktemagnet.
Dave
15

Werkzeug / Flask hat schon alles für dich analysiert. Mit urlparse müssen Sie die gleiche Arbeit nicht erneut ausführen:

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 für die Anforderungs- und Antwortobjekte finden Sie in Werkzeug: http://werkzeug.pocoo.org/docs/wrappers/

Simon Sapin
quelle
14

Wir können dies tun, indem wir request.query_string verwenden.

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

Sie können es auch modularer gestalten, indem Sie Flask Blueprints verwenden - http://flask.pocoo.org/docs/0.10/blueprints/

Nehmen wir an, der Vorname wird als Teil der Abfragezeichenfolge / web_url /? First_name = john übergeben

## 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 + formatieren und verwenden oder sie an die Vorlagendatei übergeben.

Pralhad Narsinh Sonar
quelle
11

Ich bin hierher gekommen, um nach der Abfragezeichenfolge zu suchen, nicht nach dem Abrufen von Werten aus der Abfragezeichenfolge.

request.query_string Gibt die URL-Parameter als Rohbyte-Zeichenfolge zurück (Ref. 1).

Anwendungsbeispiel 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:

Abfrageparameter in der Kolbenroute

Verweise:

  1. Offizielle API-Dokumentation zu query_string
Michael Ribbons
quelle
1
Dies sollte die akzeptierte Antwort sein, da sie genau die Lösung liefert, nach der das OP gesucht hat.
constt
Es ist schwer, mit +600 auf eine etwas ungenaue Antwort zu kämpfen.
Marvin
4

Versuchen Sie Folgendes 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: Geben Sie hier die Bildbeschreibung ein

Sankar Guru
quelle
request.args ['args1'] ist besser geschrieben als request.args.get ('args1')
imbatman
1

Jede Form der Abfragezeichenfolge, die vom Flask-Anforderungsobjekt abgerufen werden kann, wie in O'Reilly Flask Web Devleopment beschrieben :

Aus der Webentwicklung von O'Reilly Flask und wie bereits von Manan Gouhari angegeben, müssen Sie zunächst die folgende Anfrage importieren:

from flask import request

requestist ein Objekt, das von Flask als Kontextvariable mit dem Namen (Sie haben es erraten) verfügbar gemacht wird request. Wie der Name schon sagt, enthält es alle Informationen, die der Client in der HTTP-Anforderung enthalten hat. Dieses Objekt verfügt über viele Attribute und Methoden, die Sie abrufen bzw. aufrufen können.

Sie haben einige requestAttribute, die die Abfragezeichenfolge enthalten, aus der Sie auswählen können. Hier werde ich jedes Attribut auflisten, das in irgendeiner Weise die Abfragezeichenfolge enthält, sowie eine Beschreibung aus dem O'Reilly-Buch dieses Attributs.

Zuerst gibt es args"ein Wörterbuch mit allen Argumenten, die in der Abfragezeichenfolge der URL übergeben werden". Wenn Sie also die Abfragezeichenfolge in ein Wörterbuch analysieren möchten, gehen Sie wie folgt vor:

from flask import request

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

(Wie andere bereits betont haben, können Sie auch .get('<arg_name>')einen bestimmten Wert aus dem Wörterbuch abrufen.)

Dann gibt es das formAttribut, das nicht die Abfragezeichenfolge enthält, sondern in einem Teil eines anderen Attributs enthalten ist, das die Abfragezeichenfolge enthält, die ich kurz auflisten werde. Zunächst formist jedoch "Ein Wörterbuch mit allen Formularfeldern, die mit der Anforderung übermittelt wurden". Ich sage das, um dies zu sagen: Es gibt ein anderes Wörterbuchattribut, das im aufgerufenen Flask-Anforderungsobjekt verfügbar ist values. valuesist "Ein Wörterbuch, das die Werte in formund kombiniert args." Das abzurufen würde ungefähr so ​​aussehen:

from flask import request

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

(Verwenden Sie erneut .get('<arg_name>'), um ein bestimmtes Element aus dem Wörterbuch zu entfernen.)

Eine andere Option ist query_string"Der Teil der Abfragezeichenfolge der URL als roher Binärwert". Beispiel dafür:

from flask import request

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

Als zusätzlichen Bonus gibt es full_path"Der Pfad und die Abfragezeichenfolgen 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 :)

23r0c001
quelle
0

Dies kann mit erfolgen request.args.get(). Wenn Ihre Abfragezeichenfolge beispielsweise ein Feld enthält date, kann mit auf das Feld zugegriffen werden

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

Vergessen Sie nicht, " request" zur Liste der Importe aus der Flasche hinzuzufügen , d. H.

from flask import request
Manan Gouhari
quelle
Während Ihre Antwort technisch korrekt ist, gibt es bereits andere Antworten (ältere und vollständigere), die eine Verwendung vorschlagen request.args.get(). Neue Antworten auf alte Fragen sollten etwas enthalten, das zuvor nicht erwähnt wurde.
lfurini
0

Wenn die Anfrage if GET und wir einige Abfrageparameter übergeben haben, dann

fro`enter code here`m flask import request
@app.route('/')
@app.route('/data')
def data():
   if request.method == 'GET':
      # Get the parameters by key
      arg1 = request.args.get('arg1')
      arg2 = request.args.get('arg2')
      # Generate the query string
      query_string="?arg1={0}&arg2={1}".format(arg1, arg2)
      return render_template("data.html", query_string=query_string)
RAJAHMAD MULANI
quelle