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:
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