やるだけPython競プロ日誌

競プロの解説をPythonでやっていきます。できるだけ初心者に分かりやすいように『やるだけ』とかは言わないようにします。コメントについては必ず読んでいます。どんなに細かいことでもいいのでコメントくださればうれしいです。

Flask 1.0 has released! Flask 1.0での変更点

2018/4/26にFlaskのversion 1.0がリリースされました。


以下にその変更点を訳してまとめておきます。翻訳は完了しました。誤った部分があればご指摘ください。

Python2.6 と 3.3のサポートが終了しました

Python 2.6 and 3.3 are no longer supported. (pallets/meta#24)

要求されるライブラリのバージョンは以下の通りです: Werkzeug >= 0.14, Jinja >= 2.10, itsdangerous >= 0.24, Click >= 5.1.

Bump minimum dependency versions to the latest stable versions: Werkzeug >= 0.14, Jinja >= 2.10, itsdangerous >= 0.24, Click >= 5.1. (#2586)

コンソールから実行された際、app.runを無視するようになりました。これによって、デバッグを煩わせる振る舞いを無くします。

Skip app.run when a Flask application is run from the command line. This avoids some behavior that was confusing to debug.

JSONIFY_PRETTYPRINT_REGULARのデフォルトの値をFalseにしました。jsonify()デバッグモードではデフォルトでインデントで整えられたコンパクトな返り値を返します。

Change the default for JSONIFY_PRETTYPRINT_REGULAR to False. jsonify() returns a compact format by default, and an indented format in debug mode. (#2193)

Flask.__init__は引数 host_matchingを取るようになり、それをurl_mapにセットするようになりました

Flask.__init__ accepts the host_matching argument and sets it on url_map. (#1559)

Flask.__init__は引数 static_host_argumentを取るようになり、静的ルートを定義するときの引数hostとしてにそれを渡すようになりました。

Flask.__init__ accepts the static_host argument and passes it as the host argument when defining the static route. (#1559)

send_file()Unicodeattachment_filenameでサポートしました。

send_file() supports Unicode in attachment_filename. (#2223)

url_for()からhandle_url_build__error()_schemeを渡すようになりました

Pass _scheme argument from url_for() to handle_url_build_error(). (#2017)

add_url_rule()が引数 provide_automatic_optionsOPTIONSを追加することを無効にするために受け取れるようになりました。

add_url_rule() accepts the provide_automatic_options argument to disable adding the OPTIONS method. (#1489)

MethosViewサブクラスがメソッドハンドラをベースクラスから受け継ぐようになりました

MethodView subclasses inherit method handlers from base classes. (#1936)

リクエストの始めのセッションを開く段階で起こったエラーが appのエラーハンドラで処理されるようになりました

Errors caused while opening the session at the beginning of the request are handled by the app’s error handlers. (#2254)

Blueprintにjson_encoderjson_decoderが appのエンコーダとデコーダを上書きするために追加されました。

Blueprints gained json_encoder and json_decoder attributes to override the app’s encoder and decoder. (#1898)

Flask.make_response()が、レスポンスのタイプが正しくない場合TypeErrorValueErrorを挙げるようになりました。エラーメッセージが、タイプの違いを説明するために分かりやすくなりました。

Flask.make_response() raises TypeError instead of ValueError for bad response types. The error messages have been improved to describe why the type is invalid. (#2256)

アプリケーションによって作成されたルートを出力するためにroutesCLIコマンドに追加しました。

Add routes CLI command to output routes registered on the application. (#2259)

セッションのドメインのクッキーが素のhostnameか IPアドレスだった場合、警告するようになりました。Chromeのように一部のブラウザでは正しく動作しないからです。

Show warning when session cookie domain is a bare hostname or an IP address, as these may not behave properly in some browsers, such as Chrome. (#2282)

IPアドレスをセッションのクッキーのドメインとして受け入れるようになりました。

Allow IP address as exact session cookie domain. (#2282)

SERVER_NAMEを通して検出された場合、SESSION_COKKIE_DOMAINが自動で設定されるようになりました

SESSION_COOKIE_DOMAIN is set if it is detected through SERVER_NAME. (#2282)

FLASK_APPの引数のないapp factoryのcreate_appmake_appを自動検出するようになりました。

Auto-detect zero-argument app factory called create_app or make_app from FLASK_APP. (#2297)

flaskコマンドで実行する際、factory関数にscript_infoパラメータを与えなくてもよくなりました。もし一つのパラメータ、あるいは、script_infoというパラメータを取る際、ScriptInfoオブジェクトが渡されます。

Factory functions are not required to take a script_info parameter to work with the flask command. If they take a single parameter or a parameter named script_info, the ScriptInfo object will be passed. (#2319)

FLASK_APP=myproject.app:create_app('dev')のように、必要ならばFLASK_APPを引数とともにapp factoryに渡せるようになりました。

FLASK_APP can be set to an app factory, with arguments if needed, for example FLASK_APP=myproject.app:create_app('dev'). (#2326)

pip install -eは未だ最適ですが、FLASK_APPは可編集モードでインストールされていないローカルなパッケージを指定できるようになりました。

FLASK_APP can point to local packages that are not installed in editable mode, although pip install -e is still preferred. (#2414)

Viewクラスのアトリビュートprovide_automatic_optionsadd_url_rule()で検出されるようにas_view()に設定されるようになりました。

The View class attribute provide_automatic_options is set in as_view(), to be detected by add_url_rule(). (#2316)

エラー処理はblueprint, code, app, code, blueprint, exception, app, exceptionに登録されたハンドラを試すようになりました。

Error handling will try handlers registered for blueprint, code, app, code, blueprint, exception, app, exception. (#2314)

セッションがすべてのリクエストの間アクセスされ(消去されなかっ)た場合、Cookieがレスポンスの Varyヘッダーに追加されるようになりました。

Cookie is added to the response’s Vary header if the session is accessed at all during the request (and not deleted). (#2288)

test_request_context()が引数subdomainurl_schemeをベースURLを作成する際に受け取れるようになりました。

test_request_context() accepts subdomain and url_scheme arguments for use when building the base URL. (#1621)

APPLICATION_ROOT'/'をデフォルトで設定するようになりました。これは、APPLICATION_ROOTNoneに設定していた時に暗黙的に行われていたことです。

Set APPLICATION_ROOT to '/' by default. This was already the implicit default when it was set to None.

TRAP_BAD_REQUEST_ERRORSがデフォルトでデバッグモード中に有効になりました。

デバッグモード中、一般的な bad request message の代わりにBadRequestKeyErrorが正しくないキーとともにメッセージを持つようになりました。

TRAP_BAD_REQUEST_ERRORS is enabled by default in debug mode. BadRequestKeyError has a message with the bad key in debug mode instead of the generic bad request message. (#2348)

セッションクッキー内に異なる型を保存するためにTaggedJSONSerializerとともに新しいタグを登録できるようになりました。

Allow registering new tags with TaggedJSONSerializer to support storing other types in the session cookie. (#2352)

リクエストがスタック文脈にプッシュされていない場合のみにセッションが開かれるようになりました。これにより containing viewを使った同じセッションにstream_with_context()ジェネレータを使ってアクセスすることが可能になりました。

Only open the session if the request has not been pushed onto the context stack yet. This allows stream_with_context() generators to access the same session that the containing view uses. (#2354)

テストクライアントのリクエストメソッドに jsonキーワードの引数を追加しました。これにより、与えられたオブジェクトをJSONとしてダンプして、適切なコンテントタイプを充てることができるようになります。

Add json keyword argument for the test client request methods. This will dump the given object as JSON and set the appropriate content type. (#2358)

RequestResponseクラスの両方に登録されたmix-inにJSONハンドルを抽出します。これは、JSONレスポンスのテストを非常に簡単にするために、レスポンスにis_json()メソッドとget_json()メソッドを追加します。

Extract JSON handling to a mixin applied to both the Request and Response classes. This adds the is_json() and get_json() methods to the response to make testing JSON response much easier. (#2358)

エラー処理のキャッシュを無くしました。なぜなら、それがエクセプション継承の階層に予期できない結果をもたらすからです。もしMROをトラバースしたくなければ、各エラーにハンドラを明示的に登録してください。

Removed error handler caching because it caused unexpected results for some exception inheritance hierarchies. Register handlers explicitly for each exception if you want to avoid traversing the MRO. (#2362)

世界協定時でない時間のJSONエンコードに誤りが発生する問題を修正しました

Fix incorrect JSON encoding of aware, non-UTC datetimes. (#2374)

jinja_envが既にアクセスされていても、テンプレート自動再読み込みはデバッグモードを優先するようになりました。

Template auto reloading will honor debug mode even even if jinja_env was already accessed. (#2373)

以下の非推奨のコードが削除されました。

The following old deprecated code was removed. (#2385)

flask.ext - flask.ext名前空間を通す代わりに拡張機能をじかに名前でインポートします。例えば、 import flask.ext.sqlalchemyimport flask_alchemyになります。

flask.ext - import extensions directly by their name instead of through the flask.ext namespace. For example, import flask.ext.sqlalchemy becomes import flask_sqlalchemy.

Flask.init_jinja_globals - Flask.create_jinja_environment()に代わりに拡張されました

Flask.init_jinja_globals - extend Flask.create_jinja_environment() instead.

Flask.error_handlers - Flask.error_handler_specを追跡に使用し、Flask.errorhandler()をハンドラの登録に使用してください。

Flask.error_handlers - tracked by Flask.error_handler_spec, use Flask.errorhandler() to register handlers.

Flask.request_globals_class - Flask.app_ctx_globals_classを代わりに使用してください。

Flask.request_globals_class - use Flask.app_ctx_globals_class instead.

Flask.static_path - Flask.static_url_pathを代わりに使用してください。

Flask.static_path - use Flask.static_url_path instead.

Request.module - Request.blueprintを代わりに使用してください。

Request.module - use Request.blueprint instead.

Request.jsonプロパティが非推奨ではなくなりました。

The Request.json property is no longer deprecated. (#1421)

EnvironBuilderDicttest_client.openに渡すことがサポートされました。

Support passing a EnvironBuilder or dict to test_client.open. (#2412)

python-dotenvがインストールされていた場合、flaskコマンドとFlask.run()環境変数.env.flaskenvから読み込むようになりました。

The flask command and Flask.run() will load environment variables from .env and .flaskenv files if python-dotenv is installed. (#2416)

テストクライアントにフルURLを渡すとき、スキーム内のURLがPREFERRED_URL_SCHEMEの代わりに渡されるようになりました。

When passing a full URL to the test client, the scheme in the URL is used instead of PREFERRED_URL_SCHEME. (#2430)

Flask.loggerがシンプルになりました。LOGGER_HANDLER_POLICYのコンフィグが削除されました。ロガーの名前は常にflask.appになりました。ロガーの名前は常にflask.appです。レベルは最初のアクセス時にのみ設定され、毎回Flask.debugをチェックすることはしません。 Flask.debugに依存するものではなく、使用されるフォーマットは1つだけです。ハンドラは削除されておらず、ハンドラがすでに設定されていない場合にのみハンドラが追加されます。

Flask.logger has been simplified. LOGGER_NAME and LOGGER_HANDLER_POLICY config was removed. The logger is always named flask.app. The level is only set on first access, it doesn’t check Flask.debug each time. Only one format is used, not different ones depending on Flask.debug. No handlers are removed, and a handler is only added if no handlers are already configured. (#2436)

Blueprint view関数の名前はドットを含まなくなりました。

Blueprint view function names may not contain dots. (#2450)

いくつかの場合で誤ったRangeのリクエストにより起きるValueErrorが修正されました。

Fix a ValueError caused by invalid Range requests in some cases. (#2526)

開発用サーバーがデフォルトでスレッディングを行うようになりました。

The development server uses threads by default. (#2529)

silent=Trueでコンフィグを読み込んだ時、ENOTDIRエラーが無視されるようになりました。

Loading config files with silent=True will ignore ENOTDIR errors. (#2581)

--cert--keyのオプションをflask runに渡すことで、開発用サーバがHTTPSを使用して実行するようになりました。

Pass --cert and --key options to flask run to run the development server over HTTPS. (#2606)

セッションクッキーのSameSite属性を操作するために、SESSION_COOKIE_SAMESITEを追加しました。

Added SESSION_COOKIE_SAMESITE to control the SameSite attribute on the session cookie. (#2607)

テスト用のFlask CLIコマンドを呼び出すためのクリックランナーを作成するためにtest_cli_runner()を追加しました。

Added test_cli_runner() to create a Click runner that can invoke Flask CLI commands for testing. (#2636)

サブドメインマッチングがデフォルトで無効にされ、SERVER_NAMEを設定することが暗黙的にサブドメインマッチングを有効にすることがなくなりました。有効にするには、Flaskコンストラクタにsubdomain_matching=Trueを渡してください。

Subdomain matching is disabled by default and setting SERVER_NAME does not implicily enable it. It can be enabled by passing subdomain_matching=True to the Flask constructor. (#2635)

blueprintのurl_prefixがappに登録されたとき、末尾に単独のスラッシュがあった場合、それを取り除くようになりました。

A single trailing slash is stripped from the blueprint url_prefix when it is registered with the app. (#2629)

silentが true の時、Request.get_json()が解析に失敗した場合、結果をキャッシュしなくなりました。

Request.get_json() doesn’t cache the result if parsing fails when silent is true. (#2651)

Request.get_json()は任意のエンコーディングをサポートしなくなりました。以降のJSONUTF-8によりエンコードされた、RFC 8259準拠のものが推奨されます。しかし、FlaskはUTF-8, -16, -32を自動で判別します。

Request.get_json() no longer accepts arbitrary encodings. Incoming JSON should be encoded using UTF-8 per RFC 8259, but Flask will autodetect UTF-8, -16, or -32. (#2691)

ブラウザが無視してしまうような巨大なクッキーについてWerkzeugが警告したときのため、それらをコントロールするためMAX_COOKIE_SIZEResponse.max_cookie_sizeを追加しました。

Added MAX_COOKIE_SIZE and Response.max_cookie_size to control when Werkzeug warns about large cookies that browsers may ignore. (#2693)

小さいウィンドウでも見やすいよう、ドキュメンテーションのテーマを更新しました。

Updated documentation theme to make docs look better in small windows. (#2709)

新しいユーザを落とし穴から守るため、チュートリアルと例として挙げるプロジェクトをより構造化されたアプローチに変更しました。

Rewrote the tutorial docs and example project to take a more structured approach to help new users avoid common pitfalls. (#2676)