2012-08-02 24 views
214

No es obvio en la documentación del matraz sobre cómo obtener la cadena de consulta. ¡Soy nuevo, miré los documentos, no pude encontrar!¿Cómo se obtiene una cadena de consulta en Flask?

Así

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

Está en la documentación debajo de inicio rápido: http://flask.pocoo.org/docs/quickstart/#the-request-object – Jarus

Respuesta

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

Este ejemplo devuelve ese valor del parámetro "usuario" pasado en la cadena de consulta, no el cadena de consulta en sí. "Cadena de consulta" significa todo después del signo de interrogación y antes del signo de libra, si hay uno presente. –

+18

todavía es una respuesta útil, considere que está relacionado con la pregunta. Tan válido y +1 – Necronet

+1

¿Esto generará una excepción si el usuario no está presente? (Supongo que no si args es solo un dict.) –

152

La URL completa está disponible como request.url, y la cadena de consulta está disponible como request.query_string.

He aquí un ejemplo:

from flask import request 

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

    return request.query_string 

Para acceder a un parámetro individuo conocido aprobada en la cadena de consulta, puede utilizar request.args.get('param'). Esta es la forma "correcta" de hacerlo, hasta donde yo sé.

ETA: antes de continuar, debe preguntarse por qué quiere la cadena de consulta. Nunca tuve que tirar de la cadena en bruto. Flask tiene mecanismos para acceder a ella de una manera abstracta. Debería usarlos a menos que tenga una razón convincente para no hacerlo.

+2

para la legibilidad que podría usar '.query' en lugar de '[4]' – jfs

+0

De hecho, debería leer la especificación la próxima vez :) –

+0

ver también http://stackoverflow.com/a/11792690 – jfs

11

Werkzeug/Flask como ya se analizó todo para usted. No hay necesidad de hacer el mismo trabajo de nuevo 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 documentación completa para los objetos de petición y respuesta está en Werkzeug: http://werkzeug.pocoo.org/docs/wrappers/

10

Podemos hacer esto mediante el uso de request.query_string.

Ejemplo:

Vamos a considerar 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()) 

también hace que sea más modular mediante el uso Frasco Planos - http://flask.pocoo.org/docs/0.10/blueprints/

Vamos a considerar primero nombre se pasa como parte de la consulta cadena /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 

Como ve, este es solo un pequeño ejemplo: puede buscar varios valores + formatearlos y usarlos o pasarlos al archivo de la plantilla.

Cuestiones relacionadas