Como você obtém uma string de consulta no Flask?

409

Não é óbvio na documentação do balão sobre como obter a string de consulta. Eu sou novo, olhou para os documentos, não conseguiu encontrar!

assim

@app.route('/')
@app.route('/data')
def data():
    query_string=??????
    return render_template("data.html")
Tampa
fonte
11
Está na documentação em quickstart: flask.pocoo.org/docs/quickstart/#the-request-object
Jarus
Mas, ele não usa o termo 'string de consulta'. Apenas os chama de parâmetros. > Para acessar os parâmetros apresentados no URL (? Key = value), você pode usar o atributo args:>> searchword = request.args.get ( 'chave', '')
Ion Freeman

Respostas:

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')
Kracekumar
fonte
70
Este exemplo retorna esse valor do parâmetro "user" passado na cadeia de caracteres de consulta, não na própria string de consulta. "Sequência de consulta" significa tudo depois do ponto de interrogação e antes do sinal de libra, se houver algum.
Lyndsy Simon
45
ainda é uma resposta útil, considere que está relacionada à pergunta. Tão válido e +1
Necronet
8
Não - como em um ditado e .get, você obteria Nenhum.
JPEG_
5
@LyndsySimon: Bem avistado. Mas, como essa resposta responde corretamente à pergunta a que meus termos de pesquisa do Google aludiram ('parâmetro de solicitação de obtenção de balão'), eu estou votando de qualquer maneira. Também sou pedante, mas estou atribuindo isso ao misticismo da web. Sche
Michael Scheper
5
Nenhum argumento de mim! Meus comentários sobre essa questão têm sido uma fonte contínua de pontos de SO e carma geral. :) Feliz hacking!
precisa saber é o seguinte
237

O URL completo está disponível como request.urle a sequência de consultas está disponível como request.query_string.

Aqui está um exemplo:

from flask import request

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

    return request.query_string

Para acessar um parâmetro conhecido individual passado na cadeia de consulta, você pode usar request.args.get('param'). Esta é a maneira "certa" de fazê-lo, tanto quanto eu sei.

ETA: Antes de prosseguir, você deve se perguntar por que deseja a string de consulta. Eu nunca tive que puxar a string bruta - o Flask possui mecanismos para acessá-la de maneira abstrata. Você deve usá-los, a menos que tenha uma razão convincente para não o fazer.

Lyndsy Simon
fonte
11
+1 para a resposta correta real. Os fluxos OAuth, como o Dropbox, solicitam regularmente URLs de redirecionamento para os quais passar tokens. Faz todo o sentido que você queira analisar a string de consulta.
Richard Løvehjerte 11/10
Um -1 virtual para a resposta errada 😉. Embora literalmente correto, ele não fornece o que o OP estava procurando, o que a resposta aceita fornece. DWIM FTW. Bem jogado como um ímã de pontos SO, no entanto.
Dave
15

O Werkzeug / Flask já analisou tudo para você. Não há necessidade de fazer o mesmo trabalho novamente com 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")

A documentação completa para os objetos de solicitação e resposta está em Werkzeug: http://werkzeug.pocoo.org/docs/wrappers/

Simon Sapin
fonte
14

Podemos fazer isso usando request.query_string.

Exemplo:

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

Você também o torna mais modular usando o Flask Blueprints - http://flask.pocoo.org/docs/0.10/blueprints/

Vamos considerar que o primeiro nome está sendo passado como parte da string de consulta / 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 você vê, este é apenas um pequeno exemplo - você pode buscar vários valores + formatar esses e usá-los ou passá-los para o arquivo de modelo.

Pralhad Narsinh Sonar
fonte
11

Eu vim aqui procurando a string de consulta, não como obter valores da string de consulta.

request.query_string retorna os parâmetros de URL como sequência de bytes bruta (Ref 1).

Exemplo de uso 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)

Resultado:

parâmetros de consulta na rota do balão

Referências:

  1. Documentação oficial da API em query_string
Michael Ribbons
fonte
1
Essa deve ser a resposta aceita, pois fornece a solução exata que o OP estava procurando.
constt 16/10/19
É difícil lutar com +600 em respostas um tanto imprecisas.
Marvin
4

Tente assim para a string de consulta:

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)

Resultado: insira a descrição da imagem aqui

Sankar guru
fonte
request.args ['args1'] é melhor escrito como request.args.get ('args1')
imbatman 03/09/19
1

Todas as formas da sequência de consultas recuperáveis ​​do objeto de solicitação do balão, conforme descrito em O'Reilly Flask Web Devleopment :

No O'Reilly Flask Web Development , e como declarado por Manan Gouhari anteriormente, primeiro você precisa importar a solicitação:

from flask import request

requesté um objeto exposto pelo Flask como uma variável de contexto denominada (você adivinhou) request. Como o próprio nome sugere, ele contém todas as informações que o cliente incluiu na solicitação HTTP. Este objeto possui muitos atributos e métodos que você pode recuperar e chamar, respectivamente.

Você tem alguns requestatributos que contêm a cadeia de caracteres de consulta para escolher. Aqui, listarei todos os atributos que contenham a string de consulta, bem como uma descrição do livro O'Reilly desse atributo.

Primeiro, existe o argsque é "um dicionário com todos os argumentos passados ​​na string de consulta do URL". Portanto, se você deseja que a string de consulta seja analisada em um dicionário, faça algo assim:

from flask import request

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

(Como outros salientaram, você também pode usar .get('<arg_name>')para obter um valor específico do dicionário)

Então, há o formatributo, o que não contêm a string de consulta, mas que está incluído na parte de outro atributo que faz incluir a string de consulta que vou listar momentaneamente. Primeiro, porém, formé "Um dicionário com todos os campos do formulário enviados com a solicitação". Eu digo o seguinte: existe outro atributo de dicionário disponível no objeto de solicitação do balão chamado values. valuesé "Um dicionário que combina os valores em forme args". Recuperar isso seria algo como isto:

from flask import request

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

(Mais uma vez, use .get('<arg_name>')para obter um item específico do dicionário)

Outra opção é query_string"A parte da string de consulta da URL, como um valor binário bruto". Exemplo disso:

from flask import request

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

Então, como um bônus adicional, existe o full_pathque é "O caminho e as partes da string de consulta do URL". Por ejemplo:

from flask import request

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

E, finalmente, url"A URL completa solicitada pelo cliente" (que inclui a cadeia de consulta):

from flask import request

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

Happy hacking :)

23r0c001
fonte
0

Isso pode ser feito usando request.args.get(). Por exemplo, se a sua string de consulta tiver um campo date, ela poderá ser acessada usando

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

Não se esqueça de adicionar " request" à lista de importações do balão, ou seja,

from flask import request
Manan Gouhari
fonte
Embora sua resposta esteja tecnicamente correta, já existem outras respostas (mais antigas e mais completas) sugerindo o uso request.args.get(); novas respostas para perguntas antigas devem conter algo que não foi mencionado antes.
Lfurini 10/01/19
0

Se a solicitação for GET e passamos alguns parâmetros de consulta,

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
fonte