flask가 0.12 버전으로 릴리즈된지 1년 5개월만에 드디어 메이저 버전인 1.0 버전이 릴리즈 되었다.
이 글에서는 1.0 버전이 되면서 인상적인 변경점만 정리해봤다.
Flask version 1.0 full changelog - Released on April 26th 2018
Python 2.6과 3.3 지원을 중단했다. [pallets/meta#24]
JSONIFY_PRETTYPRINT_REGULAR
config 값은 jsonify()
가 반환하는 응답의 포맷을 결정하는데 이젠 debug 모드가 아닐 때 기본적으로 False로 설정되어 json 응답이 compact하게 출력된다. debug 모드에선 기본적으로 True로 설정된다. [#2193]
Blueprint별로 json_encoder
와 json_decoder
를 설정할 수 있게되었다. [#1898]
FLASK_APP
환경 변수를 설정할 때 인자가 없는 팩토리 함수(e.g. create_app
, make_app
)를 자동으로 감지한다. [#2297]
인자가 있는 팩토리 함수도 FLASK_APP
으로 설정이 가능해졌다. [#2326]
테스트 클라이언트에 새로운 json
키워드 인자가 추가되었다. 테스트에서 app.test_client()
로 json request를 보낼 때 일일이 data=json.dumps()
, content_type='application/json'
으로 설정해야 했으나 이젠 단순히 json={'foo': 'bar'}
처럼 해줄 수 있다. [#2358]
Request
에 있던 json 처리 루틴을 JSONMixin
으로 분리하고, Request
와 Response
둘 모두에 JSONMixin
이 추가되면서 이제 Response
에도 is_json()
과 get_json()
이 추가되어 json 응답을 테스팅하기 더욱 편해졌다. 만약 pytest-flask
를 사용하고 있다면 몽키패치로 Response
클래스를 대체해 .json
프로퍼티를 지원하고 있으므로 크게 신경쓰지 않아도 된다. [#2358]
오래된 flask 예제를 보면 flask.ext.foo
같은 형태로 확장 플러그인을 불러오는 모습을 볼 수 있었고 그동안 DeprecationWarning을 띄워주고있었지만 버전업을 통해 오래된 부분을 완전히 삭제했다. 앞으로 flask.ext.sqlalchemy
형태를 사용하는 대신 flask_sqlalchemy
처럼 사용해아한다. 더불어 몇 가지 deprecated 코드도 같이 삭제되었다. [#2385]
그동안 Request.json
프로퍼티는 DeprecationWarning을 발생시키고 대신 get_json()
을 사용하고 있었지만 [#1421]에서 논의를 거친 끝에 .form
, .data
와의 일관성, 기존 코드가 경고말곤 아무런 조치도 취하지 않고 단순히 get_json()
을 호출했던 점 등을 이유로 DeprecationWarning이 삭제되었다. [#2397]
flask
커맨드, Flask.run()
에서 python-dotenv
가 설치되어 있다면 .env
, .flaskenv
파일을 자동으로 감지해 환경 변수를 읽어들인다. [#2416]
로깅이 간편해졌다. LOGGER_NAME
, LOGGER_HANDLER_POLICY
가 삭제되었으며 기존의 Error Handling 문서에 있던 logging 파트가 가독성이 향상된 별도의 Logging 문서로 분리되고 정보가 추가되었다. [#2436]
이제 기본적으로 development 환경에서 서버가 멀티스레드로 동작한다. 그에 맞춰 문서에서 by default serves only one request at a time 이라는 문구가 삭제되었다. 로컬 머신에서 테스트해 본 결과 동시에 128개의 요청도 처리 가능했지만 어디까지나 개발 환경에서 편의성이 좋아진 것으로 프로덕션 환경에서 app.run()
은 추천하지 않는다. [#2529]
튜토리얼에 있는 예제가 다시 쓰여졌다. flask에서 자주 쓰이는 패턴과 구조를 적용한 예제들로 팩토리 패턴(e.g. create_app()
), blueprint, config 파일 사용, pytest와 coverage, Waitress
를 사용한 프로덕션 서버 실행 등이 적용됐다. [#2676]
개인적으로 flask를 애용하고 있었는데 이번 릴리즈를 통해 테스트가 좀 더 간편해지고 튜토리얼이 보강된 점이 특히 마음에 든다. 이 글에서 소개된 변경점 말고도 무척 많은 점이 변경되었는데 앞으로 점점 더 성장하는 flask가 되었으면 좋겠다.