Frasco request.args.get

Salman Mehmood 15 febrero 2024
Frasco request.args.get

Aprenderemos, con esta explicación, cómo trabajar con request.args.get. También aprenderemos la posible forma de obtener un error cuando usamos el objeto de solicitud y su atributo en Flask.

Use request.args.get para obtener una cadena de consulta en Flask

Cuando requerimos la información del cliente en la solicitud, utilizamos la variable request que forma parte del módulo Flask. Podemos ver que esta es nuestra función de vista, que no toma ningún argumento; simplemente está conectado a la ruta de nuestra aplicación.

Usamos esta variable de solicitud que parece una variable global pero no lo es; se importa de Flask.

¿Qué sucede si se trata de una aplicación de subprocesos múltiples y llegan dos solicitudes simultáneamente de diferentes clientes? La función se ejecutará simultáneamente en dos subprocesos diferentes, y ambos utilizan una solicitud de referencia.

from flask import Flask, request

app = Flask(__name__)
app.config["SECRET_KEY"] = "NO_SECRETS"


@app.route("/")
def Main_Page():
    Employee_Name = request.args.get("name")

    return "<h2>Hello {}</h2>".format(Employee_Name)


if __name__ == "__main__":
    app.run(debug=True)

Cada hilo obtendrá el objeto de solicitud correcto. Pero esto causa mucha confusión, y muchas personas no entienden cómo funciona, así que intentaremos mostrarte cómo funciona el objeto solicitud.

Posible forma de obtener un error al usar el objeto solicitud en Flask

Mostraremos algunos ejemplos de personas que experimentan errores muy oscuros y nadie entiende lo que sucede a veces. Abrimos el shell de Python, y si importamos una solicitud del Flask, no hay problema con ello.

Si usamos el request.args.get() para obtener un elemento de la cadena de consulta de la URL usando http://127.0.0.1:5000/?name=jack, y cuando usamos el Flask request objeto dentro de la consola, obtenemos el famoso error que es Trabajando fuera del contexto de la solicitud. Esta es una forma en que las personas obtendrán este error.

>>> from flask import Flask ,request
>>> request.args.get('name')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\python\lib\site-packages\werkzeug\local.py", line 432, in __get__
    obj = instance._get_current_object()
  File "C:\python\lib\site-packages\werkzeug\local.py", line 554, in _get_current_object
    return self.__local()  # type: ignore
  File "C:\python\lib\site-packages\flask\globals.py", line 33, in _lookup_req_object
    raise RuntimeError(_request_ctx_err_msg)
RuntimeError: Working outside of request context.

This typically means you attempted to use functionality that needed
an active HTTP request. Consult the documentation on testing for
information about how to avoid this problem.

Imagina que Flask está recibiendo una solicitud de un cliente y necesita invocar tu función de visualización. Toma la información que proporciona el navegador web y luego crea un objeto de solicitud.

Un contexto de solicitud es una estructura que mantiene Flask. Mantiene un contexto de solicitud por subproceso.

Cada hilo tendrá un contexto de solicitud diferente; pone el objeto de solicitud para esa solicitud en el contexto. El contexto es una estructura de datos que es una lista de objetos, y cuando llega una nueva solicitud, Flask invocará su función de visualización.

Cada vez que intentamos acceder a un atributo, Flask invoca su función de vista para ese objeto de solicitud que se asigna a la solicitud del cliente. Debido a que cada subproceso tiene una estructura de contexto de solicitud diferente, cada subproceso obtendrá sus propios servidores.

Cuando usamos request.args fuera de la función de vista, activa el proxy para ver el objeto request almacenado en el contexto de solicitud para este hilo. Y, por supuesto, no hay nada de eso porque no estamos ejecutando una aplicación; por eso no estamos recibiendo solicitudes.

En este caso, Flask detecta que estamos solicitando obtener un objeto de solicitud de un contexto de solicitud que no existe. Cuando ejecutamos nuestra aplicación de matraz e intentamos acceder a la consulta de cadena usando request.args.get() desde el punto final de la URL:

Frasco request.args.get Salida

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn