Flask-request.args.get

Salman Mehmood 15 Februar 2024
Flask-request.args.get

Mit dieser Erklärung lernen wir, wie man mit request.args.get arbeitet. Wir werden auch die Möglichkeit kennenlernen, einen Fehler zu erhalten, wenn wir das Anforderungsobjekt und sein Attribut in Flask verwenden.

Verwenden Sie request.args.get, um die Abfragezeichenfolge in Flask abzurufen

Wenn wir die Informationen des Clients in der Anfrage benötigen, verwenden wir die Variable request, die Teil des Flask-Moduls ist. Wir können sehen, dass dies unsere Ansichtsfunktion ist, die keine Argumente akzeptiert; es ist nur mit der Route unserer Anwendung verbunden.

Wir verwenden diese request-Variable, die wie eine globale Variable aussieht, aber keine ist; es wird aus Flask importiert.

Was passiert, wenn es sich um eine Multithread-Anwendung handelt und zwei Anfragen gleichzeitig von verschiedenen Clients eingehen? Die Funktion wird gleichzeitig in zwei verschiedenen Threads ausgeführt, und beide verwenden eine Referenzierungsanforderung.

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)

Jeder Thread erhält das richtige request-Objekt. Aber das verursacht viel Verwirrung, und viele Leute verstehen nicht, wie das funktioniert, also werden wir versuchen, Ihnen zu zeigen, wie das Objekt request funktioniert.

Möglicher Weg, um einen Fehler zu erhalten, wenn das Objekt request in Flask verwendet wird

Wir zeigen einige Beispiele dafür, dass Menschen sehr obskure Fehler erleben und niemand versteht, was manchmal passiert. Wir öffnen die Python-Shell, und wenn wir eine Anfrage aus dem Flask importieren, gibt es kein Problem damit.

Wenn wir request.args.get() verwenden, um ein Element aus der Abfragezeichenfolge der URL mit http://127.0.0.1:5000/?name=jack zu erhalten, und wenn wir den Flask request Objekt in der Konsole erhalten wir den berühmten Fehler Working outside of request context. Dies ist eine Möglichkeit, wie Benutzer diesen Fehler erhalten.

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

Stellen Sie sich vor, Flask erhält eine Anfrage von einem Client und muss Ihre Ansichtsfunktion aufrufen. Es nimmt die Informationen, die der Webbrowser bereitstellt, und erstellt dann ein request-Objekt.

Ein Anforderungskontext ist eine Struktur, die Flask verwaltet. Es verwaltet einen Anforderungskontext pro Thread.

Jeder Thread hat einen anderen Anforderungskontext; es stellt das Anforderungsobjekt für diese Anforderung in den Kontext. Der Kontext ist eine Datenstruktur, die eine Liste von Objekten ist, und wenn eine neue Anfrage eintrifft, ruft Flask Ihre Ansichtsfunktion auf.

Immer wenn wir versuchen, auf ein Attribut zuzugreifen, ruft Flask Ihre Ansichtsfunktion für dieses Anforderungsobjekt auf, das der Clientanforderung zugeordnet ist. Da jeder Thread eine andere Anforderungskontextstruktur hat, erhält jeder Thread seine eigenen Server.

Wenn wir request.args aus der Ansichtsfunktion verwenden, aktiviert es den Proxy, um das im Anforderungskontext für diesen Thread gespeicherte request-Objekt zu sehen. Und natürlich gibt es das nicht, weil wir keine Anwendung ausführen; Deshalb erhalten wir keine Anfragen.

In diesem Fall erkennt Flask, dass wir darum bitten, ein request-Objekt aus einem nicht existierenden Request-Kontext zu holen. Wenn wir unsere Flask-Anwendung ausführen und versuchen, mit request.args.get() vom URL-Endpunkt aus auf die Zeichenfolgenabfrage zuzugreifen:

Flask-request.args.get-Ausgabe

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