tornado.web
— RequestHandler
および Application
クラス¶
tornado.web
は、多数のオープン接続に対応できるようにスケーリング可能な非同期機能を備えたシンプルな Web フレームワークを提供し、ロングポーリング に最適です。
以下は簡単な「Hello, world」のサンプルアプリです。
import asyncio
import tornado
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
async def main():
application = tornado.web.Application([
(r"/", MainHandler),
])
application.listen(8888)
await asyncio.Event().wait()
if __name__ == "__main__":
asyncio.run(main())
詳細については、ユーザーズガイドを参照してください。
スレッド安全性に関する注意点¶
一般的に、Tornado の RequestHandler
およびその他の場所にあるメソッドはスレッドセーフではありません。特に、write()
、finish()
、flush()
などのメソッドは、メインスレッドからのみ呼び出す必要があります。複数のスレッドを使用する場合は、リクエストを終了する前に IOLoop.add_callback
を使用して制御をメインスレッドに戻すか、他のスレッドの使用を IOLoop.run_in_executor
に制限し、Executor で実行されるコールバックが Tornado オブジェクトを参照しないようにすることが重要です。
リクエストハンドラー¶
- class tornado.web.RequestHandler(...)[ソース]¶
HTTP リクエストハンドラーのベースクラスです。
サブクラスは、以下の「エントリポイント」セクションで定義されているメソッドの少なくとも 1 つを定義する必要があります。
アプリケーションは
RequestHandler
オブジェクトを直接構築するべきではなく、サブクラスは__init__
をオーバーライドするべきではありません(代わりにinitialize
をオーバーライドしてください)。
エントリポイント¶
- RequestHandler.initialize() None ¶
サブクラスの初期化のためのフックです。各リクエストに対して呼び出されます。
URLSpec
の 3 番目の引数として渡された辞書は、initialize()
へのキーワード引数として提供されます。例
class ProfileHandler(RequestHandler): def initialize(self, database): self.database = database def get(self, username): ... app = Application([ (r'/user/(.*)', ProfileHandler, dict(database=database)), ])
- RequestHandler.prepare() Optional[Awaitable[None]] [ソース]¶
get
/post
/など、リクエストの開始時に呼び出されます。リクエストメソッドに関係なく共通の初期化を実行するには、このメソッドをオーバーライドします。
非同期サポート:このメソッドを非同期にするには、
async def
を使用するか、gen.coroutine
でデコレートします。このメソッドがAwaitable
を返す場合、Awaitable
が完了するまで実行は進みません。バージョン 3.1 で追加: 非同期サポート。
- RequestHandler.on_finish() None [ソース]¶
リクエストの終了後に呼び出されます。
クリーンアップやロギングなどを実行するには、このメソッドをオーバーライドします。このメソッドは
prepare
の対になるメソッドです。on_finish
は、レスポンスがクライアントに送信された後に呼び出されるため、いかなる出力も生成してはいけません。
対応する HTTP メソッドを処理するには、以下のメソッド(まとめて HTTP 動詞メソッドとして知られる)のいずれかを実装します。これらのメソッドは、async def
キーワードまたは gen.coroutine
デコレータを使用して非同期にできます。
これらのメソッドへの引数は、URLSpec
から渡されます。正規表現のキャプチャグループは、HTTP 動詞メソッドの引数になります(グループに名前が付けられている場合はキーワード引数、名前が付けられていない場合は位置引数)。
このリストにないメソッドをサポートするには、クラス変数 SUPPORTED_METHODS
をオーバーライドします。
class WebDAVHandler(RequestHandler):
SUPPORTED_METHODS = RequestHandler.SUPPORTED_METHODS + ('PROPFIND',)
def propfind(self):
pass
入力¶
argument
メソッドは、HTMLフォーム形式の引数をサポートします。これらのメソッドは、単数形と複数形の両方で利用可能です。これは、HTMLフォームがあいまいであり、単一の引数と1つのエントリを含むリストを区別しないためです。引数に他の形式(例えば、JSON)を使用したい場合は、self.request.body
を自分で解析してください。
def prepare(self):
if self.request.headers['Content-Type'] == 'application/x-json':
self.args = json_decode(self.request.body)
# Access self.args directly instead of using self.get_argument.
- RequestHandler.get_argument(name: str, default: str, strip: bool = True) str [ソース]¶
- RequestHandler.get_argument(name: str, default: _ArgDefaultMarker = _ARG_DEFAULT, strip: bool = True) str
- RequestHandler.get_argument(name: str, default: None, strip: bool = True) Optional[str]
指定された名前の引数の値を返します。
default が提供されていない場合、引数は必須とみなされ、欠落している場合は
MissingArgumentError
を発生させます。引数がリクエストに複数回現れる場合、最後の値を返します。
このメソッドは、クエリ引数とボディ引数の両方を検索します。
- RequestHandler.get_arguments(name: str, strip: bool = True) List[str] [ソース]¶
指定された名前の引数のリストを返します。
引数が存在しない場合は、空のリストを返します。
このメソッドは、クエリ引数とボディ引数の両方を検索します。
- RequestHandler.get_query_argument(name: str, default: Union[None, str, RAISE] = RAISE, strip: bool = True) Optional[str] [ソース]¶
リクエストのクエリ文字列から、指定された名前の引数の値を返します。
default が提供されていない場合、引数は必須とみなされ、欠落している場合は
MissingArgumentError
を発生させます。引数が URL に複数回出現する場合、最後の値を返します。
バージョン 3.2 で追加されました。
- RequestHandler.get_query_arguments(name: str, strip: bool = True) List[str] [ソース]¶
指定された名前のクエリ引数のリストを返します。
引数が存在しない場合は、空のリストを返します。
バージョン 3.2 で追加されました。
- RequestHandler.get_body_argument(name: str, default: Union[None, str, RAISE] = RAISE, strip: bool = True) Optional[str] [ソース]¶
リクエストボディから、指定された名前の引数の値を返します。
default が提供されていない場合、引数は必須とみなされ、欠落している場合は
MissingArgumentError
を発生させます。引数が URL に複数回出現する場合、最後の値を返します。
バージョン 3.2 で追加されました。
- RequestHandler.get_body_arguments(name: str, strip: bool = True) List[str] [ソース]¶
指定された名前のボディ引数のリストを返します。
引数が存在しない場合は、空のリストを返します。
バージョン 3.2 で追加されました。
- RequestHandler.decode_argument(value: bytes, name: Optional[str] = None) str [ソース]¶
リクエストから引数をデコードします。
引数はパーセントデコードされ、現在はバイト文字列になっています。デフォルトでは、このメソッドは引数を utf-8 としてデコードし、ユニコード文字列を返しますが、これはサブクラスでオーバーライドできます。
このメソッドは、
get_argument()
と、URL から抽出されget()
/post()
/などのメソッドに渡される値の両方のフィルターとして使用されます。引数の名前が既知の場合は提供されますが、None の場合もあります (例: URL 正規表現の無名グループ)。
- RequestHandler.request¶
ヘッダーやボディデータなど、追加のリクエストパラメーターを含む
tornado.httputil.HTTPServerRequest
オブジェクト。
- RequestHandler.path_args¶
- RequestHandler.path_kwargs¶
path_args
およびpath_kwargs
属性には、HTTP 動詞メソッドに渡される位置引数とキーワード引数が含まれます。これらの属性は、それらのメソッドが呼び出される前に設定されるため、prepare
の実行中に値を利用できます。
出力¶
- RequestHandler.set_status(status_code: int, reason: Optional[str] = None) None [ソース]¶
レスポンスのステータスコードを設定します。
- パラメータ
status_code (int) – レスポンスのステータスコード。
reason (str) – ステータスコードを説明する、人間が読める理由フレーズ。
None
の場合は、http.client.responses
または「Unknown」から補完されます。
バージョン 5.0 で変更: レスポンスコードが
http.client.responses
にあるかどうかの検証はなくなりました。
- RequestHandler.set_header(name: str, value: Union[bytes, str, int, Integral, datetime]) None [ソース]¶
指定されたレスポンスヘッダー名と値を設定します。
すべてのヘッダー値は文字列に変換されます(
datetime
オブジェクトはDate
ヘッダーの HTTP 仕様に従ってフォーマットされます)。
- RequestHandler.add_header(name: str, value: Union[bytes, str, int, Integral, datetime]) None [ソース]¶
指定されたレスポンスヘッダーと値を追加します。
set_header
とは異なり、add_header
は、同じヘッダーに複数の値を返すために複数回呼び出すことができます。
- RequestHandler.clear_header(name: str) None [ソース]¶
以前の
set_header
呼び出しを元に戻して、送信ヘッダーをクリアします。このメソッドは、
add_header
によって設定された複数値ヘッダーには適用されないことに注意してください。
- RequestHandler.set_default_headers() None [ソース]¶
リクエストの開始時に HTTP ヘッダーを設定するには、これをオーバーライドします。
たとえば、カスタム
Server
ヘッダーを設定する場合はここで行います。リクエスト処理の通常のフローでこのようなヘッダーを設定すると、エラー処理中にヘッダーがリセットされる可能性があるため、期待どおりに動作しない可能性があることに注意してください。
- RequestHandler.write(chunk: Union[str, bytes, dict]) None [ソース]¶
指定されたチャンクを出力バッファーに書き込みます。
出力をネットワークに書き込むには、以下の
flush()
メソッドを使用します。与えられたチャンクが辞書の場合、JSONとして書き込み、レスポンスのContent-Typeを
application/json
に設定します。(JSONを別のContent-Type
で送信したい場合は、write()
を呼び出した後にset_header
を呼び出してください。)リストはクロスサイトセキュリティの脆弱性の可能性があるため、JSONに変換されないことに注意してください。すべてのJSON出力は辞書でラップする必要があります。詳細については、http://haacked.com/archive/2009/06/25/json-hijacking.aspx/ および https://github.com/facebook/tornado/issues/1009 を参照してください。
- RequestHandler.flush(include_footers: bool = False) Future[None] [ソース]¶
現在の出力バッファをネットワークにフラッシュします。
バージョン 4.0 で変更: コールバックが指定されていない場合、
Future
を返すようになりました。バージョン 6.0 で変更:
callback
引数が削除されました。
- RequestHandler.finish(chunk: Optional[Union[str, bytes, dict]] = None) Future[None] [ソース]¶
このレスポンスを終了し、HTTPリクエストを終了します。
chunk
をfinish()
に渡すことは、そのチャンクをwrite()
に渡してから、引数なしでfinish()
を呼び出すことと同じです。クライアントへのレスポンスの送信を追跡するために、必要に応じて待機できる
Future
を返します。このFuture
は、すべてのレスポンスデータが送信されたときに解決され、すべてのデータを送信する前に接続が閉じられた場合はエラーが発生します。バージョン 5.1 で変更:
None
の代わりにFuture
を返すようになりました。
- RequestHandler.render(template_name: str, **kwargs: Any) Future[None] [ソース]¶
与えられた引数を使用してテンプレートをレスポンスとしてレンダリングします。
render()
はfinish()
を呼び出すため、その後は他の出力メソッドを呼び出すことはできません。finish
によって返されるものと同じセマンティクスを持つFuture
を返します。このFuture
の待機はオプションです。バージョン 5.1 で変更:
None
の代わりにFuture
を返すようになりました。
- RequestHandler.render_string(template_name: str, **kwargs: Any) bytes [ソース]¶
与えられた引数で指定されたテンプレートを生成します。
生成されたバイト文字列(utf8)を返します。レスポンスとしてテンプレートを生成して書き込むには、上記の render() を使用してください。
- RequestHandler.get_template_namespace() Dict[str, Any] [ソース]¶
デフォルトのテンプレート名前空間として使用される辞書を返します。
サブクラスによってオーバーライドして、値を追加または変更できます。
このメソッドの結果は、
tornado.template
モジュールの追加のデフォルト、およびrender
またはrender_string
へのキーワード引数と組み合わされます。
- RequestHandler.redirect(url: str, permanent: bool = False, status: Optional[int] = None) None [ソース]¶
指定された(オプションで相対的な)URLにリダイレクトを送信します。
status
引数が指定されている場合、その値がHTTPステータスコードとして使用されます。それ以外の場合は、permanent
引数に基づいて、301(永続的)または302(一時的)が選択されます。デフォルトは302(一時的)です。
- RequestHandler.send_error(status_code: int = 500, **kwargs: Any) None [ソース]¶
指定されたHTTPエラーコードをブラウザに送信します。
flush()
がすでに呼び出されている場合は、エラーを送信することはできません。そのため、このメソッドは単に応答を終了します。出力が書き込まれているがまだフラッシュされていない場合は、破棄され、エラーページに置き換えられます。返されるエラーページをカスタマイズするには、
write_error()
をオーバーライドします。追加のキーワード引数はwrite_error
に渡されます。
- RequestHandler.write_error(status_code: int, **kwargs: Any) None [ソース]¶
カスタムエラーページを実装するためにオーバーライドします。
write_error
は、write
、render
、set_header
などを呼び出して、通常どおり出力を生成できます。このエラーがキャッチされない例外(HTTPErrorを含む)によって発生した場合、
exc_info
の三重項がkwargs["exc_info"]
として利用可能になります。この例外は、sys.exc_info()
やtraceback.format_exc
のようなメソッドの目的のために「現在の」例外ではない可能性があることに注意してください。
- RequestHandler.render_linked_js(js_files: Iterable[str]) str [ソース]¶
レンダリングされたWebページ用の最終的なjsリンクをレンダリングするために使用されるデフォルトのメソッド。
出力を変更するには、サブクラス化されたコントローラーでこのメソッドをオーバーライドします。
- RequestHandler.render_embed_js(js_embed: Iterable[bytes]) bytes [ソース]¶
レンダリングされたWebページ用の最終的な埋め込みjsをレンダリングするために使用されるデフォルトのメソッド。
出力を変更するには、サブクラス化されたコントローラーでこのメソッドをオーバーライドします。
その他¶
- RequestHandler.application¶
このリクエストを処理する
Application
オブジェクト
- RequestHandler.check_etag_header() bool [ソース]¶
Etag
ヘッダーをリクエストのIf-None-Match
と比較して確認します。リクエストの Etag が一致し、304 を返す必要がある場合は
True
を返します。例:self.set_etag_header() if self.check_etag_header(): self.set_status(304) return
このメソッドはリクエストが完了すると自動的に呼び出されますが、
compute_etag
をオーバーライドし、リクエストの完了前にIf-None-Match
の早期チェックを実行したいアプリケーションのために、より早く呼び出すこともできます。このメソッドを呼び出す前に、(おそらくset_etag_header
を使用して)Etag
ヘッダーを設定する必要があります。
- RequestHandler.check_xsrf_cookie() None [ソース]¶
_xsrf
クッキーが_xsrf
引数と一致することを確認します。クロスサイトリクエストフォージェリを防ぐために、
_xsrf
クッキーを設定し、すべてのPOST
リクエストで同じ値を非クッキーフィールドとして含めます。2つが一致しない場合、フォーム送信を潜在的な偽造として拒否します。_xsrf
値は、_xsrf
という名前のフォームフィールド、またはX-XSRFToken
またはX-CSRFToken
という名前のカスタム HTTP ヘッダーのいずれかで設定できます(後者は Django との互換性のために受け入れられます)。http://en.wikipedia.org/wiki/Cross-site_request_forgery を参照してください。
バージョン 3.2.2 で変更: クッキーバージョン 2 のサポートが追加されました。バージョン 1 と 2 の両方がサポートされています。
- RequestHandler.compute_etag() Optional[str] [ソース]¶
このリクエストに使用する etag ヘッダーを計算します。
デフォルトでは、これまでに書き込まれたコンテンツのハッシュを使用します。
カスタム etag 実装を提供するためにオーバーライドできます。または、tornado のデフォルトの etag サポートを無効にするために None を返すことができます。
- RequestHandler.create_template_loader(template_path: str) BaseLoader [ソース]¶
指定されたパスの新しいテンプレートローダーを返します。
サブクラスでオーバーライドできます。デフォルトでは、指定されたパスにあるディレクトリベースのローダーを返し、
autoescape
とtemplate_whitespace
アプリケーション設定を使用します。template_loader
アプリケーション設定が指定されている場合は、代わりにそれを使用します。
- RequestHandler.current_user¶
このリクエストで認証されたユーザー。
これは次の 2 つの方法のいずれかで設定されます。
サブクラスは
get_current_user()
をオーバーライドできます。これは、self.current_user
が最初にアクセスされたときに自動的に呼び出されます。get_current_user()
はリクエストごとに 1 回のみ呼び出され、今後のアクセスのためにキャッシュされます。def get_current_user(self): user_cookie = self.get_signed_cookie("user") if user_cookie: return json.loads(user_cookie) return None
通常の変数として設定することもできます。通常は、オーバーライドされた
prepare()
から設定します。@gen.coroutine def prepare(self): user_id_cookie = self.get_signed_cookie("user_id") if user_id_cookie: self.current_user = yield load_user(user_id_cookie)
prepare()
はコルーチンである可能性がありますが、get_current_user()
はコルーチンではないため、ユーザーの読み込みに非同期操作が必要な場合は、後者の形式が必要です。ユーザーオブジェクトは、アプリケーションが選択する任意の型にできます。
- RequestHandler.detach() IOStream [ソース]¶
基になるストリームの制御を奪います。
基になる
IOStream
オブジェクトを返し、それ以降のすべての HTTP 処理を停止します。HTTP ハンドシェイクを介してトンネルする WebSocket などのプロトコルを実装するためのものです。このメソッドは、HTTP/1.1 が使用されている場合にのみサポートされます。
バージョン 5.1 で新規追加。
- RequestHandler.get_browser_locale(default: str = 'en_US') Locale [ソース]¶
Accept-Language
ヘッダーからユーザーのロケールを決定します。http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 を参照してください。
- RequestHandler.get_current_user() Any [ソース]¶
たとえば、Cookie から現在のユーザーを決定するためにオーバーライドします。
このメソッドはコルーチンにすることはできません。
- RequestHandler.get_login_url() str [ソース]¶
リクエストに基づいてログイン URL をカスタマイズするためにオーバーライドします。
デフォルトでは、
login_url
アプリケーション設定を使用します。
- RequestHandler.get_template_path() Optional[str] [ソース]¶
各ハンドラーのテンプレートパスをカスタマイズするためにオーバーライドします。
デフォルトでは、
template_path
アプリケーション設定を使用します。呼び出し元のファイルに対して相対的にテンプレートをロードするには、None を返します。
- RequestHandler.get_user_locale() Optional[Locale] [ソース]¶
認証されたユーザーからロケールを決定するためにオーバーライドします。
None が返された場合は、
get_browser_locale()
にフォールバックします。このメソッドは、
tornado.locale.Locale
オブジェクトを返す必要があります。ほとんどの場合、tornado.locale.get("en")
のような呼び出しで取得します。
- RequestHandler.locale¶
現在のセッションのロケール。
データベースに保存されたユーザー設定などに基づいてロケールを設定するためにオーバーライドできる
get_user_locale
、またはAccept-Language
ヘッダーを使用するget_browser_locale
によって決定されます。
- RequestHandler.log_exception(typ: Optional[Type[BaseException]], value: Optional[BaseException], tb: Optional[TracebackType]) None [ソース]¶
キャッチされない例外のログ出力をカスタマイズするためにオーバーライドします。
デフォルトでは、
HTTPError
のインスタンスはスタックトレースなしで警告として (tornado.general
ロガーで)、その他すべての例外はスタックトレース付きのエラーとして (tornado.application
ロガーで) ログ出力します。バージョン 3.1 で新規追加。
- RequestHandler.on_connection_close() None [ソース]¶
クライアントが接続を閉じた場合に、非同期ハンドラで呼び出されます。
長期間の接続に関連するリソースをクリーンアップするには、これをオーバーライドします。このメソッドは、非同期処理中に接続が閉じられた場合にのみ呼び出されることに注意してください。すべてのリクエスト後にクリーンアップを実行する必要がある場合は、代わりに
on_finish
をオーバーライドしてください。プロキシは、クライアントが接続を閉じた後、一定時間(場合によっては無期限に)接続を開いたままにする可能性があるため、このメソッドは、エンドユーザーが接続を閉じた直後にすぐに呼び出されない場合があります。
- RequestHandler.require_setting(name: str, feature: str = 'この機能') None [ソース]¶
指定されたアプリ設定が定義されていない場合、例外を発生させます。
- RequestHandler.set_etag_header() None [ソース]¶
self.compute_etag()
を使用して、レスポンスの Etag ヘッダーを設定します。注:
compute_etag()
がNone
を返す場合、ヘッダーは設定されません。このメソッドは、リクエストが終了したときに自動的に呼び出されます。
- RequestHandler.settings¶
self.application.settings
のエイリアス。
- RequestHandler.static_url(path: str, include_host: Optional[bool] = None, **kwargs: Any) str [ソース]¶
指定された相対的な静的ファイルパスの静的 URL を返します。
このメソッドでは、アプリケーションで
static_path
設定(静的ファイルのルートディレクトリを指定)を設定する必要があります。このメソッドは、バージョン付き URL(デフォルトでは
?v=<signature>
を追加)を返し、静的ファイルを無期限にキャッシュできます。これは、include_version=False
を渡すことで無効にできます(デフォルトの実装では。他の静的ファイルの実装はこれをサポートする必要はありませんが、他のオプションをサポートする場合があります)。デフォルトでは、このメソッドは現在のホストに対する相対 URL を返しますが、
include_host
が true の場合、返される URL は絶対 URL になります。このハンドラーにinclude_host
属性がある場合、その値はstatic_url
のすべての呼び出しで、include_host
をキーワード引数として渡さない場合のデフォルトとして使用されます。
- RequestHandler.xsrf_form_html() str [ソース]¶
すべての POST フォームに含める HTML
<input/>
要素。クロスサイトリクエストフォージェリを防止するために、すべての POST リクエストでチェックする
_xsrf
入力値を定義します。xsrf_cookies
アプリケーション設定を設定している場合は、すべての HTML フォーム内にこの HTML を含める必要があります。テンプレートでは、このメソッドは
{% module xsrf_form_html() %}
で呼び出す必要があります詳細については、上記の
check_xsrf_cookie()
を参照してください。
- RequestHandler.xsrf_token¶
現在のユーザー/セッションの XSRF 保護トークン。
クロスサイトリクエストフォージェリを防ぐために、'_xsrf'クッキーを設定し、すべてのPOSTリクエストに同じ'_xsrf'値を引数として含めます。 2つが一致しない場合、フォーム送信を潜在的な偽造として拒否します。
http://en.wikipedia.org/wiki/Cross-site_request_forgery を参照してください。
このプロパティの型は
bytes
ですが、ASCII文字のみが含まれています。文字ストリングが必要な場合、base64でエンコードする必要はありません。バイトストリングをUTF-8としてデコードするだけです。バージョン 3.2.2 で変更: XSRFトークンには、リクエストごとにランダムマスクが適用されるようになり、圧縮されたページにトークンを含めることが安全になりました。この変更によって修正された問題の詳細については、http://breachattack.comを参照してください。
xsrf_cookie_version
Application
設定が1に設定されていない限り、このメソッドが呼び出されると古い(バージョン1)クッキーがバージョン2に変換されます。バージョン 4.3 で変更:
xsrf_cookie_kwargs
Application
設定を使用して、追加のクッキーオプション(set_cookie
に直接渡される)を提供できます。たとえば、xsrf_cookie_kwargs=dict(httponly=True, secure=True)
は、_xsrf
クッキーにsecure
およびhttponly
フラグを設定します。
アプリケーション設定¶
- class tornado.web.Application(handlers: Optional[List[Union[Rule, Tuple]]] = None, default_host: Optional[str] = None, transforms: Optional[List[Type[OutputTransform]]] = None, **settings)[source]¶
Webアプリケーションを構成するリクエストハンドラーの集合です。
このクラスのインスタンスは呼び出し可能で、アプリケーションを提供するためにHTTPServerに直接渡すことができます。
application = web.Application([ (r"/", MainPageHandler), ]) http_server = httpserver.HTTPServer(application) http_server.listen(8080)
このクラスのコンストラクタは、
Rule
オブジェクトのリスト、またはRule
コンストラクタの引数に対応する値のタプルを受け取ります:(matcher, target, [target_kwargs], [name])
。角かっこ内の値はオプションです。デフォルトのマッチャーはPathMatches
なので、(regexp, target)
のタプルを(PathMatches(regexp), target)
の代わりに使うこともできます。一般的なルーティングターゲットは
RequestHandler
のサブクラスですが、ターゲットとしてルールリストを使用することもできます。これにより、ネストされたルーティング構成が作成されます。application = web.Application([ (HostMatches("example.com"), [ (r"/", MainPageHandler), (r"/feed", FeedHandler), ]), ])
これに加えて、ネストされた
Router
インスタンス、HTTPMessageDelegate
サブクラス、およびルーティングターゲットとしての呼び出し可能オブジェクトを使用できます(詳細については、routing
モジュールのドキュメントを参照してください)。リクエストを受け取ると、リストを順番に反復処理し、リクエストパスに一致する正規表現を持つ最初のリクエストクラスのインスタンスを作成します。リクエストクラスは、クラスオブジェクトまたは(完全修飾された)名前のいずれかとして指定できます。
タプルの3番目の要素(
target_kwargs
)として辞書を渡すことができます。これは、ハンドラーのコンストラクタとinitialize
メソッドのキーワード引数として使用されます。このパターンは、この例のStaticFileHandler
で使用されています(StaticFileHandler
は、後述するstatic_path設定で自動的にインストールできます)。application = web.Application([ (r"/static/(.*)", web.StaticFileHandler, {"path": "/var/www"}), ])
add_handlers
メソッドを使用して、仮想ホストをサポートします。このメソッドは、最初の引数としてホスト正規表現を受け取ります。application.add_handlers(r"www\.myhost\.com", [ (r"/article/([0-9]+)", ArticleHandler), ])
現在のリクエストのホストに一致するものがない場合、
default_host
パラメータ値がホスト正規表現と照合されます。警告
TLSを使用しないアプリケーションは、DNSリバインディング攻撃に対して脆弱な可能性があります。この攻撃は、
127.0.0.1
または他のプライベートネットワークでのみリッスンするアプリケーションに特に当てはまります。このリスクを防ぐために、適切なホストパターンを使用する必要があります(デフォルトのr'.*'
の代わりに)。default_host
引数は、DNSリバインディングに対して脆弱になる可能性があるアプリケーションでは使用しないでください。static_path
設定をキーワード引数として送信することで、静的ファイルを提供できます。これらのファイルは/static/
URIから提供します(これはstatic_url_prefix
設定で設定可能です)。また、同じディレクトリから/favicon.ico
と/robots.txt
を提供します。StaticFileHandler
のカスタムサブクラスは、static_handler_class
設定で指定できます。バージョン 4.5 で変更: 新しい
tornado.routing
モジュールとの統合。- settings¶
コンストラクタに渡された追加のキーワード引数は
settings
辞書に保存され、ドキュメントでは「アプリケーション設定」としてよく参照されます。設定は、Tornadoのさまざまな側面をカスタマイズするために使用されます(ただし、RequestHandler
のサブクラスでメソッドをオーバーライドすることで、より豊富なカスタマイズが可能になる場合もあります)。一部のアプリケーションでは、グローバル変数を使用せずに、アプリケーション固有の設定をハンドラーで利用できるようにする方法として、settings
辞書を使用することも好みます。Tornadoで使用される設定については、以下で説明します。一般的な設定
autoreload
:True
の場合、デバッグモードと自動リロードで説明されているように、ソースファイルが変更されるとサーバープロセスが再起動します。このオプションはTornado 3.2の新機能です。以前は、この機能はdebug
設定によって制御されていました。debug
: デバッグモードと自動リロードで説明されているいくつかのデバッグモード設定の省略形です。debug=True
を設定することは、autoreload=True
、compiled_template_cache=False
、static_hash_cache=False
、serve_traceback=True
と同等です。default_handler_class
とdefault_handler_args
: 他の一致するものが見つからない場合、このハンドラーが使用されます。カスタム404ページを実装するために使用します(Tornado 3.2の新機能)。compress_response
:True
の場合、テキスト形式のレスポンスは自動的に圧縮されます。Tornado 4.0の新機能。gzip
: Tornado 4.0以降のcompress_response
の非推奨のエイリアス。log_function
: この関数は、すべてのリクエストの最後に、結果をログに記録するために呼び出されます(1つの引数、RequestHandler
オブジェクト)。デフォルトの実装では、logging
モジュールのルートロガーに書き込みます。Application.log_request
をオーバーライドすることでカスタマイズすることもできます。serve_traceback
:True
の場合、デフォルトのエラーページにエラーのトレースバックが含まれます。このオプションはTornado 3.2の新機能です。以前は、この機能はdebug
設定によって制御されていました。ui_modules
とui_methods
: テンプレートで使用できるようにするUIModule
またはUIメソッドのマッピングに設定できます。モジュール、辞書、またはモジュールと辞書のリストに設定できます。詳細については、UIモジュールを参照してください。websocket_ping_interval
: 数値に設定すると、すべてのwebsocketがn秒ごとにpingされます。これにより、アイドル状態の接続を閉じる特定のプロキシサーバーを介して接続を維持したり、websocketが適切に閉じられずに失敗した場合に検出したりできます。websocket_ping_timeout
: ping間隔が設定されていて、サーバーがこの秒数内に「pong」を受信しない場合、websocketが閉じられます。デフォルトはping間隔の3倍で、最小30秒です。ping間隔が設定されていない場合は無視されます。
認証とセキュリティの設定
cookie_secret
:RequestHandler.get_signed_cookie
とset_signed_cookie
がクッキーに署名するために使用します。key_version
:cookie_secret
がキー辞書の場合、requestHandler のset_signed_cookie
が特定のキーでクッキーに署名するために使用します。login_url
: ユーザーがログインしていない場合、authenticated
デコレータはこの URL にリダイレクトします。RequestHandler.get_login_url
をオーバーライドすることで、さらにカスタマイズできます。xsrf_cookies
:True
の場合、クロスサイトリクエストフォージェリ保護 が有効になります。xsrf_cookie_version
: このサーバーで生成される新しい XSRF クッキーのバージョンを制御します。通常はデフォルトのまま(常に最も高いサポートバージョンになります)にしておくべきですが、バージョン移行中は一時的に低い値に設定できます。Tornado 3.2.2 で新しく導入され、XSRF クッキーバージョン 2 が導入されました。xsrf_cookie_kwargs
: XSRF クッキー用のRequestHandler.set_cookie
に渡される追加の引数の辞書を設定できます。xsrf_cookie_name
: XSRF クッキーに使用される名前を制御します(デフォルトは_xsrf
)。意図された使用方法は、クッキープレフィックスを利用することです。クッキープレフィックスは他のクッキーフラグと相互作用するため、{"xsrf_cookie_name": "__Host-xsrf", "xsrf_cookie_kwargs": {"secure": True}}
のように、xsrf_cookie_kwargs
と組み合わせて使用する必要があります。twitter_consumer_key
,twitter_consumer_secret
,friendfeed_consumer_key
,friendfeed_consumer_secret
,google_consumer_key
,google_consumer_secret
,facebook_api_key
,facebook_secret
:tornado.auth
モジュールで、様々な API に対して認証するために使用します。
テンプレート設定
autoescape
: テンプレートの自動エスケープを制御します。エスケープを無効にするにはNone
に設定するか、すべての出力が通過する関数の名前に設定できます。デフォルトは"xhtml_escape"
です。{% autoescape %}
ディレクティブを使用して、テンプレートごとに変更できます。compiled_template_cache
: デフォルトはTrue
です。False
の場合、テンプレートはリクエストごとに再コンパイルされます。このオプションは Tornado 3.2 で新しく導入されました。以前はこの機能はdebug
設定で制御されていました。template_path
: テンプレートファイルを含むディレクトリです。RequestHandler.get_template_path
をオーバーライドすることで、さらにカスタマイズできます。template_loader
: テンプレートの読み込みをカスタマイズするには、tornado.template.BaseLoader
のインスタンスを割り当てます。この設定を使用すると、template_path
とautoescape
設定は無視されます。RequestHandler.create_template_loader
をオーバーライドすることで、さらにカスタマイズできます。template_whitespace
: テンプレート内の空白の処理を制御します。許可される値については、tornado.template.filter_whitespace
を参照してください。Tornado 4.3 で新しく導入されました。
静的ファイル設定
static_hash_cache
: デフォルトはTrue
です。False
の場合、静的 URL はリクエストごとに再計算されます。このオプションは Tornado 3.2 で新しく導入されました。以前はこの機能はdebug
設定で制御されていました。static_path
: 静的ファイルが提供されるディレクトリです。static_url_prefix
: 静的ファイルの URL プレフィックスです。デフォルトは"/static/"
です。static_handler_class
,static_handler_args
: デフォルトのtornado.web.StaticFileHandler
の代わりに、静的ファイルに別のハンドラーを使用するように設定できます。static_handler_args
を設定する場合は、ハンドラーのinitialize
メソッドに渡されるキーワード引数の辞書である必要があります。
- Application.listen(port: int, address: Optional[str] = None, *, family: AddressFamily = AddressFamily.AF_UNSPEC, backlog: int = 128, flags: Optional[int] = None, reuse_port: bool = False, **kwargs: Any) HTTPServer [ソース]¶
このアプリケーションの HTTP サーバーを、指定されたポートで起動します。
これは、
HTTPServer
オブジェクトを作成し、その listen メソッドを呼び出すための便利なエイリアスです。HTTPServer.listen
でサポートされていないキーワード引数は、HTTPServer
コンストラクタに渡されます。高度な使用法(マルチプロセスモードなど)では、このメソッドを使用しないでください。HTTPServer
を作成し、そのTCPServer.bind
/TCPServer.start
メソッドを直接呼び出してください。このメソッドを呼び出した後でも、サーバーを起動するには
IOLoop.current().start()
を呼び出す(またはasyncio.run
内で実行する)必要があることに注意してください。HTTPServer
オブジェクトを返します。バージョン 4.3 で変更:
HTTPServer
オブジェクトを返すようになりました。バージョン 6.2 で変更:
TCPServer.listen
の新しいキーワード引数(reuse_port
を含む)のサポートが追加されました。
- Application.add_handlers(handlers: List[Union[Rule, Tuple]])[ソース]¶
指定されたハンドラーをハンドラーリストに追加します。
ホストパターンは追加された順に順次処理されます。一致するすべてのパターンが考慮されます。
- Application.get_handler_delegate(request: HTTPServerRequest, target_class: Type[RequestHandler], target_kwargs: Optional[Dict[str, Any]] = None, path_args: Optional[List[bytes]] = None, path_kwargs: Optional[Dict[str, bytes]] = None) _HandlerDelegate [ソース]¶
アプリケーションと
RequestHandler
サブクラスのリクエストを処理できるHTTPMessageDelegate
を返します。- パラメータ
request (httputil.HTTPServerRequest) – 現在のHTTPリクエスト。
target_class (RequestHandler) –
RequestHandler
クラス。target_kwargs (dict) –
target_class
コンストラクタのキーワード引数。path_args (list) – リクエスト処理中に実行される
target_class
HTTP メソッド (get
,post
など) の位置引数。path_kwargs (dict) –
target_class
HTTPメソッドのキーワード引数。
- Application.reverse_url(name: str, *args: Any) str [ソース]¶
name
という名前のハンドラーのURLパスを返します。ハンドラーは名前付きの
URLSpec
としてアプリケーションに追加する必要があります。引数は、
URLSpec
正規表現のキャプチャグループに代入されます。必要に応じて文字列に変換され、utf8としてエンコードされ、URLエスケープされます。
- Application.log_request(handler: RequestHandler) None [ソース]¶
完了したHTTPリクエストをログに書き込みます。
デフォルトでは、Pythonルートロガーに書き込みます。この動作を変更するには、Applicationをサブクラス化してこのメソッドをオーバーライドするか、アプリケーション設定辞書に
log_function
として関数を渡してください。
- class tornado.web.URLSpec(pattern: Union[str, Pattern], handler: Any, kwargs: Optional[Dict[str, Any]] = None, name: Optional[str] = None)[ソース]¶
URLとハンドラー間のマッピングを指定します。
パラメータ
pattern
: マッチングされる正規表現。正規表現内のキャプチャグループは、ハンドラーのget/post/などのメソッドに引数として渡されます(名前付きの場合はキーワードで、名前なしの場合は位置で渡されます。名前付きと名前なしのキャプチャグループは、同じルール内で混在させることはできません)。handler
: 呼び出されるRequestHandler
サブクラス。kwargs
(オプション): ハンドラーのコンストラクターに渡される追加の引数の辞書。name
(オプション): このハンドラーの名前。reverse_url
で使用されます。
URLSpec
クラスは、tornado.web.url
という名前でも利用できます。
デコレーター¶
- tornado.web.authenticated(method: Callable[[...], Optional[Awaitable[None]]]) Callable[[...], Optional[Awaitable[None]]] [ソース]¶
ユーザーがログインしている必要があるメソッドをデコレートします。
ユーザーがログインしていない場合、設定された
login url
にリダイレクトされます。クエリパラメーター付きのログインURLを設定すると、Tornadoはあなたが何をしているのかを理解しているとみなし、そのまま使用します。そうでない場合は、ログイン後にどこに送信するかをログインページに知らせるために、
next
パラメーターを追加します。
- tornado.web.addslash(method: Callable[[...], Optional[Awaitable[None]]]) Callable[[...], Optional[Awaitable[None]]] [ソース]¶
このデコレーターを使用して、リクエストパスに欠落している末尾のスラッシュを追加します。
たとえば、
/foo
へのリクエストは、このデコレーターを使用すると/foo/
にリダイレクトされます。リクエストハンドラーのマッピングでは、デコレーターの使用と組み合わせてr'/foo/?'
のような正規表現を使用する必要があります。
- tornado.web.removeslash(method: Callable[[...], Optional[Awaitable[None]]]) Callable[[...], Optional[Awaitable[None]]] [ソース]¶
このデコレーターを使用して、リクエストパスから末尾のスラッシュを削除します。
たとえば、
/foo/
へのリクエストは、このデコレーターを使用すると/foo
にリダイレクトされます。リクエストハンドラーのマッピングでは、デコレーターの使用と組み合わせてr'/foo/*'
のような正規表現を使用する必要があります。
- tornado.web.stream_request_body(cls: Type[_RequestHandlerType]) Type[_RequestHandlerType] [ソース]¶
RequestHandler
サブクラスに適用して、ストリーミングボディのサポートを有効にします。このデコレーターは、次の変更を意味します。
HTTPServerRequest.body
は未定義であり、body引数はRequestHandler.get_argument
に含まれません。RequestHandler.prepare
は、リクエストボディ全体が読み込まれた後ではなく、リクエストヘッダーが読み込まれたときに呼び出されます。サブクラスは、データが利用可能になったときに0回以上呼び出されるメソッド
data_received(self, data):
を定義する必要があります。リクエストのボディが空の場合、data_received
が呼び出されない可能性があることに注意してください。prepare
とdata_received
は、Futures(例えば@gen.coroutine
を介して)を返すことができます。その場合、これらのFuturesが完了するまで次のメソッドは呼び出されません。通常のHTTPメソッド(
post
,put
など)は、ボディ全体が読み込まれた後に呼び出されます。
使用例については、ファイルレシーバーのデモを参照してください。
その他すべて¶
- exception tornado.web.HTTPError(status_code: int = 500, log_message: Optional[str] = None, *args: Any, **kwargs: Any)[ソース]¶
HTTPエラーレスポンスに変換される例外。
HTTPError
を発生させることは、RequestHandler.send_error
を呼び出すよりも便利な代替手段です。これは自動的に現在の関数を終了させるからです。HTTPError
で送信されるレスポンスをカスタマイズするには、RequestHandler.write_error
をオーバーライドします。- パラメータ
status_code (int) – HTTPステータスコード。
reason
キーワード引数が与えられない限り、httplib.responses
にリストされている必要があります。log_message (str) – このエラーのログに書き込まれるメッセージ(
Application
がデバッグモードの場合を除き、ユーザーには表示されません)。残りの位置パラメータで埋められる%s
スタイルのプレースホルダーを含めることができます。reason (str) – キーワードのみの引数。ステータス行に
status_code
とともに渡すHTTPの「理由」フレーズ。通常はstatus_code
から自動的に決定されますが、非標準の数値コードを使用するために使用できます。
- exception tornado.web.Finish[ソース]¶
エラーレスポンスを生成せずにリクエストを終了させる例外。
Finish
がRequestHandler
で発生した場合、リクエストは終了します(まだ呼び出されていない場合はRequestHandler.finish
を呼び出します)。ただし、エラー処理メソッド(RequestHandler.write_error
を含む)は呼び出されません。Finish()
が引数なしで作成された場合、保留中のレスポンスはそのまま送信されます。Finish()
に引数が与えられた場合、その引数はRequestHandler.finish()
に渡されます。これは、
write_error
をオーバーライドするよりも(特にライブラリコードで)カスタムエラーページを実装するのに便利な方法です。if self.current_user is None: self.set_status(401) self.set_header('WWW-Authenticate', 'Basic realm="something"') raise Finish()
バージョン 4.3 で変更:
Finish()
に渡された引数は、RequestHandler.finish
に渡されるようになります。
- exception tornado.web.MissingArgumentError(arg_name: str)[ソース]¶
RequestHandler.get_argument
によって発生する例外。これは
HTTPError
のサブクラスであるため、キャッチされない場合は、500ではなく400のレスポンスコードが使用されます(スタックトレースはログに記録されません)。バージョン 3.1 で新規追加。
- class tornado.web.UIModule(handler: RequestHandler)[ソース]¶
ページ上の再利用可能なモジュール式のUIユニット。
UIモジュールは追加のクエリを実行することが多く、出力ページに含まれる追加のCSSとJavaScriptを含めることができます。これはページレンダリング時に自動的に挿入されます。
UIModuleのサブクラスは、
render
メソッドをオーバーライドする必要があります。- javascript_files() Optional[Iterable[str]] [ソース]¶
このモジュールに必要な JavaScript ファイルのリストを返すようにオーバーライドします。
戻り値が相対パスの場合、
RequestHandler.static_url
に渡されます。それ以外の場合は、そのまま使用されます。
- class tornado.web.ErrorHandler(application: Application, request: HTTPServerRequest, **kwargs: Any)[ソース]¶
すべてのリクエストに対して
status_code
でエラー応答を生成します。
- class tornado.web.FallbackHandler(application: Application, request: HTTPServerRequest, **kwargs: Any)[ソース]¶
別の HTTP サーバコールバックをラップする
RequestHandler
。フォールバックは、
HTTPServerRequest
を受け入れる callable オブジェクトです。これは、Application
やtornado.wsgi.WSGIContainer
などです。これは、同じサーバーで TornadoRequestHandlers
と WSGI の両方を使用するのに最も役立ちます。一般的な使用法wsgi_app = tornado.wsgi.WSGIContainer( django.core.handlers.wsgi.WSGIHandler()) application = tornado.web.Application([ (r"/foo", FooHandler), (r".*", FallbackHandler, dict(fallback=wsgi_app)), ])
- class tornado.web.RedirectHandler(application: Application, request: HTTPServerRequest, **kwargs: Any)[ソース]¶
すべての GET リクエストに対して、クライアントを指定された URL にリダイレクトします。
ハンドラーにキーワード引数
url
を指定する必要があります。例:application = web.Application([ (r"/oldpath", web.RedirectHandler, {"url": "/newpath"}), ])
RedirectHandler
は正規表現置換をサポートしています。たとえば、パスの最初と 2 番目の部分を入れ替えながら、残りの部分を保持するには、次のようにします。application = web.Application([ (r"/(.*?)/(.*?)/(.*)", web.RedirectHandler, {"url": "/{1}/{0}/{2}"}), ])
最終的な URL は、
str.format
およびキャプチャグループに一致するサブ文字列を使用してフォーマットされます。上記の例では、「/a/b/c」へのリクエストは次のようにフォーマットされます。str.format("/{1}/{0}/{2}", "a", "b", "c") # -> "/b/a/c"
値をどのように置換するかをカスタマイズするには、Python の 書式文字列構文 を使用します。
バージョン 4.5 で変更: 宛先 URL への置換のサポートが追加されました。
バージョン 5.0 で変更: クエリ引数が存在する場合、それらは宛先 URL にコピーされます。
- class tornado.web.StaticFileHandler(application: Application, request: HTTPServerRequest, **kwargs: Any)[source]¶
ディレクトリから静的コンテンツを配信できるシンプルなハンドラー。
StaticFileHandler
は、static_path
キーワード引数をApplication
に渡すと自動的に構成されます。このハンドラーは、static_url_prefix
、static_handler_class
、およびstatic_handler_args
設定でカスタマイズできます。静的データディレクトリのためにこのハンドラーに追加のパスをマッピングするには、アプリケーションに次のような行を追加します。
application = web.Application([ (r"/content/(.*)", web.StaticFileHandler, {"path": "/var/www"}), ])
ハンドラーのコンストラクターには、配信するコンテンツのローカルルートディレクトリを指定する
path
引数が必要です。正規表現のキャプチャグループは、get() メソッドへの
path
引数の値を解析するために必要です(上記のコンストラクター引数とは異なります)。詳細については、URLSpec
を参照してください。ディレクトリがリクエストされたときに
index.html
のようなファイルを自動的に配信するには、アプリケーション設定でstatic_handler_args=dict(default_filename="index.html")
を設定するか、default_filename
をStaticFileHandler
の初期化引数として追加します。ブラウザのキャッシュの有効性を最大化するために、このクラスはバージョン付き URL をサポートしています(デフォルトでは引数
?v=
を使用します)。バージョンが指定された場合、ブラウザにこのファイルを無期限にキャッシュするように指示します。make_static_url
(RequestHandler.static_url
としても利用可能) は、バージョン付き URL を構築するために使用できます。このハンドラーは、主に開発および軽負荷のファイル配信での使用を目的としています。トラフィックが多い場合は、専用の静的ファイルサーバー(nginx や Apache など)を使用する方が効率的です。HTTP
Accept-Ranges
メカニズムをサポートして、部分的なコンテンツを返します(一部のブラウザーでは、HTML5オーディオまたはビデオでシークするためにこの機能が必要なため)。サブクラス化に関する注意
このクラスはサブクラス化による拡張を意図して設計されていますが、静的 URL がインスタンスメソッドではなくクラスメソッドで生成されるため、継承パターンはやや異例です。クラスメソッドをオーバーライドするときは、必ず
@classmethod
デコレーターを使用してください。インスタンスメソッドは、属性self.path
、self.absolute_path
、およびself.modified
を使用できます。サブクラスは、このセクションで説明されているメソッドのみをオーバーライドする必要があります。他のメソッドをオーバーライドすると、エラーが発生しやすくなります。
StaticFileHandler.get
をオーバーライドすることは、compute_etag
および他のメソッドとの密結合のため、特に問題があります。静的 URL の生成方法を変更する場合(たとえば、別のサーバーまたは CDN の動作に合わせる場合)、
make_static_url
、parse_url_path
、get_cache_time
、および/またはget_version
をオーバーライドします。ファイルシステムとのすべてのやり取りを置き換える場合(たとえば、データベースから静的コンテンツを配信する場合)、
get_content
、get_content_size
、get_modified_time
、get_absolute_path
、およびvalidate_absolute_path
をオーバーライドします。バージョン 3.1 で変更: サブクラスの多くのメソッドは Tornado 3.1 で追加されました。
- compute_etag() Optional[str] [source]¶
静的 URL バージョンに基づいて
Etag
ヘッダーを設定します。これにより、キャッシュされたバージョンに対する効率的な
If-None-Match
チェックが可能になり、部分的な応答(つまり、ファイル全体と同じEtag
)に対して正しいEtag
が送信されます。バージョン 3.1 で新規追加。
- classmethod get_absolute_path(root: str, path: str) str [source]¶
root
を基準としたpath
の絶対位置を返します。root
は、このStaticFileHandler
用に構成されたパスです(ほとんどの場合、static_path
Application
設定)。このクラスメソッドはサブクラスでオーバーライドできます。デフォルトでは、ファイルシステムのパスを返しますが、サブクラスでオーバーライドされた
get_content
が理解する限り、他の文字列も使用できます。それらは一意である必要があります。バージョン 3.1 で新規追加。
- validate_absolute_path(root: str, absolute_path: str) Optional[str] [ソース]¶
絶対パスを検証して返します。
root
はStaticFileHandler
用に構成されたパスであり、path
はget_absolute_path
の結果です。これはリクエスト処理中に呼び出されるインスタンスメソッドであるため、
HTTPError
を発生させたり、RequestHandler.redirect
のようなメソッドを使用したりできます (リダイレクト後に None を返すと、それ以上の処理は停止します)。 ここで、ファイルが見つからない場合の 404 エラーが生成されます。このメソッドは、返却する前にパスを変更できます。ただし、そのような変更は
make_static_url
によって理解されないことに注意してください。インスタンスメソッドでは、このメソッドの結果は
self.absolute_path
として利用できます。バージョン 3.1 で新規追加。
- classmethod get_content(abspath: str, start: Optional[int] = None, end: Optional[int] = None) Generator[bytes, None, None] [ソース]¶
指定された絶対パスにあるリクエストされたリソースの内容を取得します。
このクラスメソッドは、サブクラスによってオーバーライドされる場合があります。そのシグネチャは、他のオーバーライド可能なクラスメソッド(
settings
引数なし)とは異なることに注意してください。これは、abspath
がキャッシュキーとして単独で機能できるようにするための意図的なものです。このメソッドは、バイト文字列またはバイト文字列のイテレータのいずれかを返す必要があります。後者は、メモリの断片化を減らすのに役立つため、大きなファイルの場合に推奨されます。
バージョン 3.1 で新規追加。
- classmethod get_content_version(abspath: str) str [ソース]¶
指定されたパスにあるリソースのバージョン文字列を返します。
このクラスメソッドは、サブクラスによってオーバーライドされる場合があります。デフォルトの実装は、ファイルの内容の SHA-512 ハッシュです。
バージョン 3.1 で新規追加。
- get_content_size() int [ソース]¶
指定されたパスにあるリソースの合計サイズを取得します。
このメソッドは、サブクラスによってオーバーライドされる場合があります。
バージョン 3.1 で新規追加。
バージョン 4.0 で変更: このメソッドは、部分的な結果が要求された場合だけでなく、常に呼び出されるようになりました。
- get_modified_time() Optional[datetime] [ソース]¶
self.absolute_path
が最後に変更された時刻を返します。サブクラスでオーバーライドできます。
datetime
オブジェクトまたは None を返す必要があります。バージョン 3.1 で新規追加。
バージョン 6.4 で変更: 現在、naive ではなく、aware な datetime オブジェクトを返します。このメソッドをオーバーライドするサブクラスは、どちらの種類でも返すことができます。
- get_cache_time(path: str, modified: Optional[datetime], mime_type: str) int [ソース]¶
キャッシュ制御の動作をカスタマイズするためにオーバーライドします。
結果をその時間だけキャッシュ可能にするには正の秒数を返すか、リソースを不特定の時間(ブラウザのヒューリスティックに従う)キャッシュ可能としてマークするには 0 を返します。
デフォルトでは、
v
引数付きでリクエストされたリソースに対して 10 年間のキャッシュ有効期限が返されます。
- classmethod make_static_url(settings: Dict[str, Any], path: str, include_version: bool = True) str [ソース]¶
指定されたパスに対するバージョン付き URL を構築します。
このメソッドはサブクラスでオーバーライドできます (ただし、インスタンスメソッドではなくクラスメソッドであることに注意してください)。サブクラスは、シグネチャ
make_static_url(cls, settings, path)
の実装のみが必須です。他のキーワード引数はstatic_url
を介して渡される可能性がありますが、標準ではありません。settings
はApplication.settings
ディクショナリです。path
はリクエストされている静的パスです。返される URL は、現在のホストに対する相対パスである必要があります。include_version
は、生成された URL に、指定されたpath
に対応するファイルのバージョンハッシュを含むクエリ文字列を含めるかどうかを決定します。
- parse_url_path(url_path: str) str [ソース]¶
静的 URL パスをファイルシステムパスに変換します。
url_path
は、static_url_prefix
が削除された URL のパスコンポーネントです。戻り値は、static_path
に対する相対的なファイルシステムパスである必要があります。これは
make_static_url
の逆です。
- classmethod get_version(settings: Dict[str, Any], path: str) Optional[str] [ソース]¶
静的 URL で使用されるバージョン文字列を生成します。
settings
はApplication.settings
ディクショナリであり、path
はファイルシステム上のリクエストされたアセットの相対的な場所です。返される値は、文字列であるか、バージョンを特定できなかった場合はNone
である必要があります。バージョン 3.1 で変更: このメソッドは、以前はサブクラスがオーバーライドすることが推奨されていましたが、
get_content_version
が、基本クラスが結果のキャッシュを処理できるようにするため、現在では推奨されています。