플라스크 request.args.get

Salman Mehmood 2024년2월15일
플라스크 request.args.get

이 설명과 함께 request.args.get으로 작업하는 방법을 배웁니다. 또한 Flask에서 요청 객체와 해당 속성을 사용할 때 오류가 발생하는 가능한 방법을 배웁니다.

request.args.get을 사용하여 Flask에서 쿼리 문자열 가져오기

요청에 클라이언트 정보가 필요한 경우 Flask 모듈의 일부인 request 변수를 사용합니다. 우리는 이것이 어떤 인자도 취하지 않는 뷰 함수임을 알 수 있습니다. 우리 애플리케이션의 경로에 연결되어 있을 뿐입니다.

전역 변수처럼 보이지만 그렇지 않은 이 request 변수를 사용합니다. Flask에서 가져온 것입니다.

다중 스레드 응용 프로그램이고 서로 다른 클라이언트에서 동시에 두 개의 요청이 들어오면 어떻게 됩니까? 함수는 서로 다른 두 스레드에서 동시에 실행되며 둘 다 참조 요청을 사용합니다.

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)

각 스레드는 올바른 요청 개체를 가져옵니다. 그러나 이것은 많은 혼란을 일으키고 많은 사람들이 그것이 어떻게 작동하는지 이해하지 못하므로 request 객체가 어떻게 작동하는지 보여주려고 노력할 것입니다.

Flask에서 request 개체를 사용할 때 오류가 발생하는 가능한 방법

우리는 사람들이 매우 모호한 오류를 경험하고 때때로 일어나는 일을 아무도 이해하지 못하는 몇 가지 예를 보여줄 것입니다. Python 셸을 열고 Flask에서 요청을 가져오면 아무런 문제가 없습니다.

http://127.0.0.1:5000/?name=jack을 사용하여 URL의 쿼리 문자열에서 항목을 얻기 위해 request.args.get()을 사용하고 Flask request를 사용하는 경우 객체가 콘솔 내부에 있는 경우 Working outside of request context라는 유명한 오류가 발생합니다. 이것은 사람들이 이 오류를 얻는 한 가지 방법입니다.

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

Flask가 클라이언트로부터 요청을 받고 뷰 함수를 호출해야 한다고 상상해 보십시오. 웹 브라우저가 제공하는 정보를 가져온 다음 request 객체를 생성합니다.

요청 컨텍스트는 Flask가 유지 관리하는 구조입니다. 스레드당 하나의 요청 컨텍스트를 유지합니다.

각 스레드는 서로 다른 요청 컨텍스트를 갖습니다. 해당 요청에 대한 요청 개체를 컨텍스트에 넣습니다. 컨텍스트는 개체 목록인 데이터 구조이며 새 요청이 도착하면 Flask가 보기 기능을 호출합니다.

속성에 액세스하려고 할 때마다 Flask는 클라이언트 요청에 매핑되는 해당 요청 개체에 대한 뷰 함수를 호출합니다. 각 스레드는 서로 다른 요청 컨텍스트 구조를 갖기 때문에 각 스레드는 자체 서버를 갖게 됩니다.

보기 기능에서 request.args를 사용하면 이 스레드에 대한 요청 컨텍스트에 저장된 request 개체를 보기 위해 프록시를 활성화합니다. 물론 우리가 애플리케이션을 실행하고 있지 않기 때문에 그럴 필요가 없습니다. 이것이 우리가 요청을 받지 않는 이유입니다.

이 경우 Flask는 존재하지 않는 요청 컨텍스트에서 request 개체를 가져오도록 요청하고 있음을 감지합니다. 플라스크 애플리케이션을 실행하고 URL 끝점에서 request.args.get()을 사용하여 문자열 쿼리에 액세스하려고 시도할 때:

Flask request.args.get 출력

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