Flask 1.0 Changelog 우리말 번역
드디어 Flask 1.0이 출시되었네요 :) http://flask.pocoo.org/docs/1.0/changelog/ 를 우리말로 번역해봤습니다. 의역, 오역 많을 수 있으니 참고로만 봐주세요. 감사합니다.
Flask 1.0 Changelog
Python 2.6과 3.3 지원이 중단되었습니다.
의존성이 업데이트 되었습니다. (Werkzeug >= 0.14, Jinja >= 2.10, itsdangersou >= 0.24, Click >= 5.1)
명령줄에서 앱을 실행할 때 app.run을 생략했습니다. 디버깅하기에 혼란스러운 동작을 피할 수 있게 되었습니다.
JSONIFY_PRETTYPRINT_REGULAR 기본값을 False로 바꾸었습니다. 이제 기본 설정에서는 디버그 모드일떄만 jsonify() 결과값이 prettify입니다.
Flask.init이 host_matching 인자를 받습니다. 이 값을 url_map에 설정합니다.
Flask.init이 static_host 인자를 받습니다. static route를 정의할 때, 이 값을 host 인자로 넘깁니다.
send_file()이 attachement_filename에 유니코드를 지원합니다.
오류가 발생하면 url_for()의 _scheme 값을 handle_url_build_error()로 넘깁니다.
add_url_rule()이 provide_automatic_options 인자를 받습니다. 이 값은 OPTIONS method 추가를 불가능하게 하기 위해 씁니다.
MethodView 서브 클래스들이 부모 클래스들의 method handlers들을 상속 받습니다.
요청 초기에 세션을 오픈하는 동안 생기는 오류들을 앱의 오류 핸들러에서 처리 가능합니다.
Blueprint에 json_encoder, json_decoder 속성이 생겼습니다. 이 속성들은 앱의 encoder와 decoder를 오버라이드합니다.
Flask.make_response()가 유효하지 않은 Response Type들에 대해 ValueError 대신 TypeError를 발생시킵니다. 왜 해당 Type이 왜 유효하지 않은지 알려주기 위해 오류 메시지를 개선했습니다.
CLI에 'routes' 명령을 추가했습니다. 이 명령은 앱에 등록된 라우팅들을 보여줍니다.
세션 쿠키 도메인이 bare hostname(ex. localhost)이거나 IP면 경고를 보여줍니다. Chrome과 같은 일부 브라우저에서는 제대로 작동하지 않을 수 있습니다.
정확한 세션 쿠키 도메인으로 IP 주소를 허용합니다.
SERVER_NAME에서 SESSION_COOKIE_DOMAIN이 감지되면, SESSION_COOKIE_DOMAIN이 설정됩니다.
앱 factory 함수 create_app 혹은 make_app을 자동으로 감지합니다.
flask 명령으로 작업하기 위해 script_info 매개 변수를 사용하는 것은 Factory 함수가 필요 없습니다. 만약에 단일 인자나 script_info라는 이름으로 인자를 받으면, ScriptInfo 객체가 넘어갑니다.
앱 factory를 FLASK_APP로 설정할 수 있습니다. 필요하면 인자도 같이 넣을 수 있습니다. ex. FLASK_APP=myproject.app:create_app('dev').
FLASK_APP은 로컬 패키지도 가리킬 수 있습니다. 로컬 패키지가 편집 가능한 상태가 아니어도 가능합니다. 물론 pip install -e를 설정하는게 선호되긴 합니다.
View 클래스 속성 provide_automatic_options가 add_url_rule()에서 감지되어, as_view()에 설정됩니다.
오류 핸들 시에 'blueprint, code', 'app, code', 'blueprint', 'exception', 'app exception'에 등록된 핸들러를 사용합니다.
요청 중에 세션에 접근할 경우 응답 Vary 헤더에 Cookie가 추가됩니다. (단, 세션이 삭제되지 않았어야 합니다.)
test_request_context()가 subdomain, url_scheme 인자를 받습니다. base URL을 만들 떄 이 값들을 사용합니다.
APPLICATION_ROOT 기본값을 '/'로 설정했습니다. 사실, 원래부터 값이 None이면 '/'로 작동하긴 했습니다.
TRAP_BAD_REQUEST_ERRORS가 디버그 모드에서 기본값으로 켜집니다. BadRequestKeyError 오류가 발생하면, 일반 모드에서는 일반적인 오류 메시지가 나오지만 디버그 모드에서는 메시지에 오류 키값이 들어있습니다.
TaggedJSONSerializer에 새로운 태그를 등록하는 것을 허용합니다. 이로 세션 쿠키에 다른 형식 저장을 지원합니다.
해당 요청이 아직 context stack에 들어가지 않았을때만 세션을 엽니다. stream_with_context() 제네레이터가 포함된 뷰에서 사용하는 것과 동일한 세션에 접근할 수 있습니다.
테스트 클라이언트 요청 메소드에 'json' keyword 인자를 추가했습니다. 주어진 객체를 JSON으로 덤프하고 적절한 Content type을 설정합니다.
요청 및 응답 클래스 모두에 적용되는 Mixin에 JSON처리를 추출했습니다. response에 is_json(), get_json() 메소드가 추가되어 JSON response 테스트가 더 쉬워집니다.
오류 핸들러 캐시를 제거했습니다. 이는 몇몇의 예외 처리에 상속 위계 문제를 일으켰습니다. MRO 통과를 피하려면 각 예외에 대해 명시적으로 핸들러를 등록해야합니다.
non-UTC datetime의 JSON 인코딩 버그를 고쳤습니다.
템플릿 자동 reloading은 이미 jinja_env에 접근했더라도 디버그 모드를 유지합니다.
다음 deprecated 코드들을 제거했습니다.
flask.ext - 확장들을 flask.ext namespace 말고 직접 import 해야합니다. ex. import flask.ext.sqlalchemy -> import flask_sqlalchemy
Flask.init_jinja_globals - Flask.create_jinja_environment()를 확장해서 사용하세요.
Flask.error_handlers - Flask.error_handler_spec으로 추적할 수 있습니다. 핸들러 등록은 Flask.errorhandler()를 쓰세요.
Flask.request_globals_class - Flask.app_ctx_globals_class를 쓰세요.
Flask.static_path - Flask.static_url_path를 쓰세요.
Request.module - Request.blueprint를 쓰세요.
Request.json - 이젠 deprecate 대상이 아닙니다.
EnvionBuilder 혹은 dict를 test_client.open에 넘기는 걸 지원합니다.
python-dotenv가 설치되어 있으면, flask 명령과 Flask.run()은 .env, .flaskenv 파일에서 환경 변수를 가져올 것 입니다.
전체 URL을 테스트 클라이언트에 넘기면, PREFERRED_URL_SCHEME 대신에 URL의 스킴이 쓰입니다.
Flask.logger가 간단해졌습니다. LOGGER_NAME과 LOGGER_HANDLER_POLICY 설정을 없앴습니다. 로거 이름은 항상 flask.app입니다. 레벨은 첫번째 접근 때 설정됩니다. 매번 Flask.debug를 확인하지 않습니다. Flask.debug에 따라 형식은 한개만 쓰입니다. 아무 핸들러도 제거되지 않고, 어떤 핸들러도 설정되어있지 않은 경우에만 추가됩니다.
Blueprint 뷰 함수는 점(.)을 포함하면 안됩니다.
유효하지 않은 Range 헤더 요청에 의해 발생하는 ValueError 버그를 고쳤습니다.
개발 서버는 기본으로 스레드를 사용합니다.
silent=True로 설정을 가져오면 ENOTDIR 오류를 무시합니다.
개발 서버에 HTTPS를 쓰고 싶으면 --cert와 --key 옵션을 flask run에 넘기면 됩니다.
세션 쿠키에 SameSite 속성을 제어하는 용도로 SESSION_COOKIE_SAMESITE를 추가했습니다.
테스트 용도로 Flask CLI 명령어를 실행할 수 있는 Click runner를 생성할 수 있도록 test_cli_runner()를 추가했습니다.
서브도메인 매칭을 기본값으로 꺼놓았습니다. SERVER_NAME 설정이 암시적으로 이것을 켜진 않습니다. subdomain_matching=True를 Flask 생성자에 넘김으로써 켤 수 있습니다.
앱에 blueprint가 등록될 때 blueprint url_prefix에서 마지막 /(slash)가 제거됩니다(stripped).
silent가 True면 Request.get_json() 파싱에 실패했을때 결과를 캐시하지 않습니다.
Request.get_json()는 더이상 임의 인코딩을 수용하지 않습니다. 요청 JSON은 RFC 8259에 근거한 UTF-8이어야 합니다. (UTF-16, UTF-32도 자동 감지합니다.)
브라우저가 무시했을 수 있는 큰 쿠키에 대해 Werkzeug가 경고할 때 이를 제어하기 위해 MAX_COOKIE_SIZE와 Response.max_cookie_size를 추가했습니다.
작은 창에서 문서를 더 쉽게 볼 수 있게 theme을 업데이트했습니다.
튜토리얼 문서와 예시 프로젝트를 재작성했습니다. 새로운 유저들이 흔히 겪는 어려움을 돕기 위해 체계화된 접근을 했습니다.









