Flask 프레임워크의 디자인 이념

2990 단어
먼저 하나의 개념을 명확히 하자면, Flask는 다중 스레드 서버이다.
프로그램 및 요청 컨텍스트
Flask 서버가 클라이언트로부터 요청을 받았을 때, 보기 함수가 제출한 폼 같은 대상에 접근할 수 있도록 해야 요청을 처리할 수 있습니다.requestobject는 클라이언트가 보낸 HTTP 요청을 봉인한 좋은 예이다
Things get more complicated if you consider that the request object is not the only object that view functions might need to access to fulfill a request.
따라서 보기 함수가 요청 대상에 접근할 수 있도록 하려면 보기 함수에 매개 변수로 전송하는 것이 뚜렷하지만, 이로 인해 프로그램의 모든 보기 함수에 매개 변수가 추가될 수 있다.접근 을 제외하고, 보기 함수가 요청을 처리할 때 다른 대상에 접근해야 한다면, 상황은 더욱 나빠질 것입니다.
To avoid cluttering view functions with lots of arguments that may or may not be needed, Flask uses contexts to temporarily make certain objects globally accessible. Thanks to contexts, view functions like the following one can be written:
그래서 대량의 있어도 되고 없어도 되는 매개 변수가 보기 함수를 엉망으로 만드는 것을 피하기 위해 Flask는 contexts(상하문)를 사용하여 일부 대상을 임시로 전역적으로 접근할 수 있도록 한다.
from flask import request
@app.route('/')
def index():
    user_agent = request.headers.get('User-Agent')
    return '

your browser is %s

' % user_agent

이 보기 함수에서 우리는 request를 전역 변수로 사용하는데 사실상 request는 전역 변수일 수 없다.
다중 스레드 서버에서 여러 개의 스레드가 서로 다른 클라이언트가 보내는 서로 다른 요청을 동시에 처리할 때 각 스레드가 보는 request 대상은 반드시 다르다.contexts(상하문) Flask 중의 특정한 변수를 한 라인에서 전역적으로 접근할 수 있게 하고 다른 라인에도 영향을 주지 않는다.
응용 프로그램 컨텍스트에 대한 공식 문서의 설명을 살펴보겠습니다.
The Application Context: Flask 뒤에 있는 디자인 이념 중 하나는 코드가 실행될 때 두 가지 다른'상태'(states)에 있다는 것이다.Flask 대상이 실례화된 후에 모듈 차원에서 응용하면 은밀하게 응용 설정 상태에 있다.첫 번째 요청이 이 상태에 이르러서야 은근히 끝났다.두 번째 상태, 두 번째 상태에 중점을 두고 요청을 처리할 때 몇 가지 다른 규칙이 있습니다.
  • 요청이 활성화되면 상하문의 로컬 대상(flask.request와 기타 대상 등)이 현재 요청
  • 을 가리킨다
  • 당신은 언제든지 코드를 사용하여 이 대상과 통신할 수 있습니다
  • 이 위아래 문장은 두 가지 호출 방식이 있습니다. 첫 번째는 은식입니다. 요청 위아래 문장 (request contexts 이 압축될 때 필요하면 응용 프로그램 위아래 문장이 함께 만들어집니다.이 때문에, 네가 그것을 필요로 하지 않는 한, 너는 상하 문장의 존재를 무시할 수 있다.두 번째는 앱을 현시적으로 호출하는context () 방법:
    from flask import Flask, current_app
    app = Flask(__name__)
    with app.app_context():
    # within this block, current_app points to app. 
        print current_app.name
    

    The Request Context request_context() 방법은 새로운 Request Context 대상을 되돌려주고 with 성명과 결합하여 위아래 문장을 연결합니다.같은 라인에서 호출된 모든 것들은 with 성명이 끝날 때까지 전역 요청 변수 (flask.request 및 기타) 에 접근할 수 있습니다.
    컨텍스트 내부 작업을 스택처럼 요청합니다.스택 상단은 현재 활성 요청입니다.push () 는 위아래 문장을 창고 위에 추가하고 pop () 는 창고에서 옮깁니다.출고 시 적용되는teardownrequest () 함수도 실행됩니다.
    또 하나 주의해야 할 것은 위아래 문장이 창고에 눌려 들어갈 때 현재 응용되고 있는 응용 프로그램의 위아래 문장이 없으면 자동으로 응용 프로그램의 위아래 문장을 만들 수 있다는 것이다.
    Flask는 요청을 배달하기 전에 프로그램과 요청 상하문을 활성화(또는 푸시)하고 요청 처리가 끝난 후에 삭제합니다.프로그램 상하문이push되면 라인에서 상응하는 변수current_app,g를 사용할 수 있습니다. 유사하게 요청한 상하문이push되면 requestsession를 사용할 수 있습니다. 만약에 사용할 때 우리가 활성화application contexts하지 않았거나request contexts하면 오류가 발생할 수 있습니다.

    좋은 웹페이지 즐겨찾기