2012-08-02 4 views
214

Nicht aus der Flask-Dokumentation ersichtlich, wie die Abfragezeichenfolge abgerufen werden kann. Ich bin neu, schaute auf die Dokumente, konnte nicht finden!Wie erhalten Sie eine Abfrage-Zeichenfolge auf Flask?

So

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

Es ist in der Dokumentation unter Quickstart: http://flask.pooco.org/docs/quickstart/#the-request-object – Jarus

Antwort

407
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') 
+33

Dieses Beispiel gibt den Wert des Parameters "user" zurück, der in der Abfragezeichenfolge übergeben wird, nicht die Abfrage String selbst. "Abfragezeichenfolge" bedeutet alles nach dem Fragezeichen und vor dem Nummernzeichen, wenn eines vorhanden ist. –

+18

ist immer noch eine nützliche Antwort, bedenken Sie, dass es mit der Frage zusammenhängt. So gültig und +1 – Necronet

+1

Wird dies eine Ausnahme auslösen, wenn der Benutzer nicht anwesend ist? (Ich denke nicht, wenn Argumente nur ein Diktat sind.) –

152

Die vollständige URL als request.url verfügbar ist, und der Query-String ist als request.query_string verfügbar.

Hier ist ein Beispiel:

from flask import request 

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

    return request.query_string 

Um einen einzelnen bekannten param in der Abfrage-String übergeben zuzugreifen, können Sie request.args.get('param') verwenden. Dies ist der "richtige" Weg, es zu tun, soweit ich weiß.

ETA: Bevor Sie weiter gehen, sollten Sie sich fragen, warum Sie die Abfragezeichenfolge möchten. Ich musste nie die rohe Saite einziehen - Flask hat Mechanismen, um auf abstrahierte Weise auf sie zuzugreifen. Sie sollten diese verwenden, es sei denn, Sie haben einen zwingenden Grund, dies nicht zu tun.

+2

für Lesbarkeit könnten Sie verwenden '.query 'statt' [4] ' – jfs

+0

In der Tat - ich sollte eigentlich die Spezifikation beim nächsten Mal lesen :) –

+0

siehe auch http://Stackoverflow.com/a/11792690 – jfs

11

Werkzeug/Flask wie schon alles geparst für Sie. Keine Notwendigkeit, die gleiche Arbeit wieder mit urlparse zu tun:

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 Anfrage und Antwort Objekte in Werkzeug ist: http://werkzeug.pocoo.org/docs/wrappers/

10

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

Beispiel:

betrachten Lets 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 es auch modular machen von Flask Riss mit - http://flask.pocoo.org/docs/0.10/blueprints/

Lets betrachten Vorname wird als Teil der Abfrage übergeben werden Zeichenkette /web_url /? Vorname_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 sie verwenden oder an die Vorlagendatei übergeben.

Verwandte Themen