Recuperando argumentos da URL em uma aplicação Flask. (Python)

Neste post mostro como recuperar argumentos passados tanto no corpo da url quanto via querystring.

 

A primeira coisa que vamos precisar para este exemplo é ter o Flask instalado e uma instância dele.

Para instalar, basta utilizar o PIP:

pip install flask

 

 

Para gerar a instancia do Flask:

from flask import Flask, jsonify, request


app = Flask(__name__)

 

Agora vamos aos exemplos práticos…

Recuperando um argumento numérico (integer) do corpo da URL

@app.route("/users/<int:id>/edit", methods=["GET"])
def route_edit_user(id):
    msg = "You want to edit the user with ID: {} | Arg type: {}".format(id, type(id))
    print(msg)

    return jsonify(msg)

Se você já está acostumado a trabalhar com Flask, percebeu que o código é bem parecido com o ‘normal’, com duas diferenças:

  1. No parâmetro de definição da rota foi incluído o parâmetro <int:id> e ele indica que um argumento do tipo integer (int) e com o nome id será passado nesta posição.
  2. Na definição do método route_edit_user foi definido também um argumento com nome Id. Este nome não é aleatório. Ele corresponde ao nome que foi informado no passo anterior (definição da rota).

Exemplo de request utilizando cURL:

curl http://localhost:5000/users/10/edit

Resultado:  “You want to edit the user with ID: 10 | Arg type: <class ‘int’>”

 

 

Recuperando argumentos string do corpo da URL

@app.route("/order/from/<string:order_from>/to/<string:order_to>", methods=["GET"])
def route_get_orders_by_location(order_from, order_to):
    msg = "You want to see the orders from {} to {}... | Arg type: order_from: {} | order_to: {}".format(
        order_from.upper(), order_to.upper(), type(order_from), type(order_to))
    print(msg)

    return jsonify(msg)

Neste método, a lógica aplicada foi a mesma. Todavia, inclui dois argumentos na url: order_from e order_to. Ambos strings.

Exemplo de request utilizando cURL:

curl http://localhost:5000/order/from/New%20York/to/West%20Virginia

Resultado: “You want to see the orders from NEW YORK to WEST VIRGINIA… | Arg type: order_from: <class ‘str’> | order_to: <class ‘str’>”

 

 

Recuperando argumentos do tipo float (double) do corpo da URL

@app.route("/double/<float:double_this>", methods=["GET"])
def route_double(double_this):
    msg = "You want double {}... which is {}... | Arg type: {}".format(double_this, double_this*2, type(double_this))
    print(msg)

    return jsonify(msg)

Novamente, a mesma lógica foi utilizada.

 

Exemplo de request utilizando cURL:

curl http://localhost:5000/double/20.5

Resultado: “You want double 20.5… which is 41.0… | Arg type: <class ‘float’>”

 

 

Recuperando argumentos da querystring

@app.route("/querystring", methods=["GET"])
def route_query_string():
    msg = "You passed {} args using query string. Your args: {}".format(len(request.args), request.args)
    print(msg)

    return jsonify(msg)

A lógica aqui é um pouco diferente. Desta vez não estou incluindo argumentos no corpo da URL, mas passando eles via query string.

Eles podem ser recuperados utilizando a propriedade args do objeto request. Ele é um ImmutableDict com todos os argumentos que foram passados. Sendo assim, você consegue trata-lo como se fosse um dicionário  normal, só não será possível modifica-lo.

 

Exemplo de request utilizando cURL:

curl -L "http://localhost:5000/querystring?a=1&b=Bacon&c=Hey%20yo!"

Resultado: “You passed 3 args using query string. Your args: ImmutableMultiDict([(‘a’, ‘1’), (‘b’, ‘Bacon’), (‘c’, ‘Hey yo!’)])”

 

 

Para quem quiser um exemplo relacionado a este post, coloquei o código no meu Github.

 

Espero ter ajudado!

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, Python and tagged , , , , .