쉘에서 작업하기

버전 0.3에 추가.

많은 사람들이 파이썬을 좋아하는 이유 중 한가지는 바로 대화식 쉘이다. 그것은 기본적으로 여러분이 실시간으로 파이썬 명령을 싱행하고 결과를 실시간으로 즉시 받아 볼 수 있다. Flask 자체는 대화식 쉘과 함께 제공되지 않는다. 왜냐하면 Flask는 특정한 선행 작업이 필요하지 않고, 단지 여러분의 어플리케이션에서 불러오기만 하면 시작할 수 있기 때문이다.

하지만, 쉘에서 좀 더 많은 즐거운 경험을 얻을 수 있는 몇 가지 유용한 헬퍼들이 있다. 대화식 콘솔 세션에서의 가장 중요한 문제는 여러분이 직접 브라우저에서 처럼 g, request 를 발생 시킬 수 없고, 그 밖의 다른 것들도 가능하지 않다. 하지만 테스트 해야 할 코드가 그것들에게 종속관계에 있다면 여러분은 어떻게 할 것인가?

이 장에는 몇가지 도움이 되는 함수가 있다. 이 함수들은 대화식 쉘에서의 사용뿐만 아니라, 단위테스트와 같은 그리고 요청 컨텍스트를 위조해야 하는 상황에서 또한 유용하다는 것을 염두해 두자.

일반적으로 여러분이 요청 컨텍스트 를 먼저 읽기를 권장한다.

요청 컨텍스트 생성하기

쉘에서 적절한 요청 컨텍스트를 생성하는 가장 쉬운 방법은 RequestContext: 를 우리에게 생성해주는 test_request_context 메소드를 사용하는 것이다.:

>>> ctx = app.test_request_context()

일반적으로 여러분은 with 구문을 사용하여 이 요청 객체를 활성화 하겠지만, 쉘에서는 push()pop() 를 직접 다루는 방법이 더 쉽다:

>>> ctx.push()

여러분이 pop 을 호출하는 그 시점까지 request 객체를 사용하여 작업 할 수 있다. :

>>> ctx.pop()

요청하기 전/후에 발사하기(Firing)

단지 요청 컨텍스트를 생성만 하면, 일반적으로 요청전에 실행되는 코드를 실행할 필요가 없다. 이것은 만약 여러분이 before-request 콜백에서 데이터베이스 연결을 하거나 , 혹은 현재 사용자가 g 객체에 저장하지 않을 경우에 발생할 수 있다..

그러나 이것은 단지 preprocess_request() 를 호출하여 쉽게 수행 할 수 있다:

>>> ctx = app.test_request_context()
>>> ctx.push()
>>> app.preprocess_request()

다음을 염두 해 두어야 한다. 이 경우에 preprocess_request() 함수는 응답(response) 객체를 리턴할 것이고, 이것은 그냥 무시해도 된다.

요청을 종료시키기 위해서, 여러분은 사후 요청 함수 ( process_response() 에 의해 트리거되는)가 응답 객체에서 사용 전에 약간의 트릭을 사용해야 한다:

>>> app.process_response(app.response_class())
<Response 0 bytes [200 OK]>
>>> ctx.pop()

컨텍스트가 열리게 되면 teardown_request() 로 등록된 함수가 자동으로 호출된다. 그래서 이것은 자동으로 요청 컨텍스트 (데이터 베이스 연결과 같은)에 필요한 자원을 해제 할 수 있는 완벽한 장소이다..

쉘 경험을 더욱 향상시키기

여러분이 만약 쉘에서의 실험적인 아이디어를 실험하기 좋아한다면, 본인 스스로 여러분의 대화형 세션으로 불러올 모듈을 만들 수 있다. 여기에 또한 여러분은 데이터베이스를 초기화 하거나 테이블을 삭제하는등의 좀 더 유용한 도우미 메소드등을 정의 할 수 있다.

단지 모듈에 이렇게 삽입하면 된다 (shelltools 처럼 불러온다.) :

>>> from shelltools import *