Come si ottiene una stringa di query su Flask?


409

Non ovvio dalla documentazione del pallone su come ottenere la stringa di query. Sono nuovo, ho guardato i documenti, non sono riuscito a trovare!

Così

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

11
È nella documentazione in quickstart: flask.pocoo.org/docs/quickstart/#the-request-object
Jarus

Ma non usa il termine "stringa di query". Li chiama semplicemente parametri. > Per accedere ai parametri inviati nell'URL (? Chiave = valore) è possibile utilizzare l'attributo args:>> searchword = request.args.get ('key', '')
Ion Freeman,

Risposte:


779
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')

70
Questo esempio restituisce quel valore del parametro "user" passato nella stringa di query, non la stringa di query stessa. "Stringa di query" significa tutto dopo il punto interrogativo e prima del segno di cancelletto, se presente.
Lyndsy Simon,

45
è ancora una risposta utile, considera che è legato alla domanda. Così valido e +1
Necronet,

8
No - come con un dict e .get, otterrai solo None.
JPEG_

5
@LyndsySimon: ben individuato. Ma poiché questa risposta risponde correttamente alla domanda a cui i miei termini di ricerca di Google hanno accennato ('flask get request parameter') lo sto comunque votando. Anch'io sono un pedante, ma lo sto attribuendo al misticismo del web. 😉
Michael Scheper,

5
Nessuna discussione da parte mia! I miei commenti su questa domanda sono stati una fonte continua di punti SO e karma generale. :) Happy hacking!
Lyndsy Simon,

237

L'URL completo è disponibile come request.urle la stringa di query è disponibile come request.query_string.

Ecco un esempio:

from flask import request

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

    return request.query_string

Per accedere a un singolo parametro noto passato nella stringa di query, è possibile utilizzare request.args.get('param'). Questo è il modo "giusto" per farlo, per quanto ne so.

ETA: prima di andare oltre, dovresti chiederti perché vuoi la stringa di query. Non ho mai dovuto inserire la stringa grezza: Flask ha meccanismi per accedervi in ​​modo astratto. Dovresti usarli a meno che tu non abbia un motivo convincente per non farlo.


11
+1 per la risposta corretta effettiva. Flussi OAuth come Dropbox chiederanno regolarmente agli URL di reindirizzamento a cui passare i token. Ha perfettamente senso che tu voglia analizzare tu stesso la stringa di query.
Richard Løvehjerte,

Un -1 virtuale per la risposta sbagliata 😉. Sebbene sia letteralmente corretto, non fornisce ciò che l'OP stava cercando, cosa che fa la risposta accettata. DWIM FTW. Ben giocato come un magnete punti SO tuttavia.
Dave,

15

Werkzeug / Flask come già analizzato tutto per te. Non è necessario ripetere lo stesso lavoro con urlparse:

from flask import request

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

La documentazione completa per gli oggetti richiesta e risposta è in Werkzeug: http://werkzeug.pocoo.org/docs/wrappers/


14

Possiamo farlo usando request.query_string.

Esempio:

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

Lo rendi anche più modulare usando Flask Blueprints - http://flask.pocoo.org/docs/0.10/blueprints/

Consideriamo che il nome viene passato come parte della stringa di query / 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

Come vedi questo è solo un piccolo esempio: puoi recuperare più valori + formularli e usarli o passarli nel file modello.


11

Sono venuto qui cercando la stringa di query, non come ottenere valori dalla stringa di query.

request.query_string restituisce i parametri URL come stringa di byte non elaborata (Rif. 1).

Esempio di utilizzo 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)

Produzione:

parametri di query nel percorso Flask

Riferimenti:

  1. Documentazione API ufficiale su query_string

1
Questa dovrebbe essere la risposta accettata in quanto fornisce la soluzione esatta che l'OP stava cercando.
const

È difficile combattere con +600 su una risposta in qualche modo inaccurata.
Marvin,

4

Prova in questo modo per la stringa di query:

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)

Produzione: inserisci qui la descrizione dell'immagine


request.args ['args1'] è meglio scritto come request.args.get ('args1')
imbatman

1

Ogni forma della stringa di query recuperabile dall'oggetto richiesta del pallone come descritto in O'Reilly Flask Web Devleopment :

Da O'Reilly Flask Web Development , e come affermato da Manan Gouhari in precedenza, devi prima importare la richiesta:

from flask import request

requestè un oggetto esposto da Flask come variabile di contesto denominata (hai indovinato) request. Come suggerisce il nome, contiene tutte le informazioni che il client ha incluso nella richiesta HTTP. Questo oggetto ha molti attributi e metodi che è possibile recuperare e chiamare, rispettivamente.

Ne hai parecchi request attributi che contengono la stringa di query tra cui scegliere. Qui elencherò ogni attributo che contiene in qualche modo la stringa di query, nonché una descrizione dal libro O'Reilly di tale attributo.

Innanzitutto c'è args"un dizionario con tutti gli argomenti passati nella stringa di query dell'URL". Quindi, se si desidera analizzare la stringa di query in un dizionario, si dovrebbe fare qualcosa del genere:

from flask import request

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

(Come altri hanno sottolineato, puoi anche utilizzare .get('<arg_name>')per ottenere un valore specifico dal dizionario)

Poi, c'è l' formattributo, che non non contiene la stringa di query, ma che è incluso nella parte di un altro attributo che fa comprendere la stringa di query che elencherò momentaneamente. Il primo, tuttavia, formè "Un dizionario con tutti i campi del modulo inviati con la richiesta." Dico questo per dire questo: c'è un altro attributo del dizionario disponibile nell'oggetto richiesta pallone chiamato values. valuesè "Un dizionario che combina i valori in forme args". Recupero che sarebbe simile a questo:

from flask import request

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

(Ancora una volta, utilizzare .get('<arg_name>')per ottenere un elemento specifico dal dizionario)

Un'altra opzione è query_string"La porzione della stringa di query dell'URL, come valore binario non elaborato". Esempio di ciò:

from flask import request

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

Quindi, come bonus aggiuntivo, c'è full_path"Il percorso e le porzioni della stringa di query dell'URL". Di ejemplo:

from flask import request

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

Infine, url"L'URL completo richiesto dal client" (che include la stringa di query):

from flask import request

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

Happy hacking :)


0

Questo può essere fatto usando request.args.get(). Ad esempio, se la stringa della query ha un campo date, è possibile accedervi utilizzando

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

Non dimenticare di aggiungere " request" all'elenco delle importazioni dal pallone, ad es

from flask import request

Mentre la tua risposta è tecnicamente corretta, ci sono già altre risposte (più vecchie e più complete) che suggeriscono di usare request.args.get(); le nuove risposte a vecchie domande dovrebbero contenere qualcosa che non è stato menzionato prima.
Lfurini,

0

Se la richiesta se GET e abbiamo passato alcuni parametri di query,

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.