tornado/docs/web.rst

339 lines
15 KiB
ReStructuredText
Raw Normal View History

2011-06-11 21:48:46 +00:00
``tornado.web`` --- ``RequestHandler`` and ``Application`` classes
==================================================================
.. testsetup::
from tornado.web import *
.. automodule:: tornado.web
2011-06-09 08:15:56 +00:00
Request handlers
----------------
2018-12-30 16:48:43 +00:00
.. autoclass:: RequestHandler(...)
2011-06-09 08:15:56 +00:00
2011-06-11 21:35:54 +00:00
Entry points
^^^^^^^^^^^^
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.initialize
.. automethod:: RequestHandler.prepare
2012-01-23 01:52:43 +00:00
.. automethod:: RequestHandler.on_finish
2011-06-11 21:35:54 +00:00
.. _verbs:
Implement any of the following methods (collectively known as the
HTTP verb methods) to handle the corresponding HTTP method. These
methods can be made asynchronous with the ``async def`` keyword or
`.gen.coroutine` decorator.
2011-06-11 21:35:54 +00:00
The arguments to these methods come from the `.URLSpec`: Any
capturing groups in the regular expression become arguments to the
HTTP verb methods (keyword arguments if the group is named,
positional arguments if it's unnamed).
To support a method not on this list, override the class variable
``SUPPORTED_METHODS``::
class WebDAVHandler(RequestHandler):
SUPPORTED_METHODS = RequestHandler.SUPPORTED_METHODS + ('PROPFIND',)
def propfind(self):
pass
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.get
.. automethod:: RequestHandler.head
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.post
.. automethod:: RequestHandler.delete
.. automethod:: RequestHandler.patch
.. automethod:: RequestHandler.put
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.options
Input
^^^^^
2018-12-30 16:48:43 +00:00
The ``argument`` methods provide support for HTML form-style
arguments. These methods are available in both singular and plural
forms because HTML forms are ambiguous and do not distinguish
between a singular argument and a list containing one entry. If you
wish to use other formats for arguments (for example, JSON), parse
``self.request.body`` yourself::
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.
.. automethod:: RequestHandler.get_argument(name: str, default: Union[None, str, RAISE] = RAISE, strip: bool = True) -> Optional[str]
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.get_arguments
2018-12-30 16:48:43 +00:00
.. automethod:: RequestHandler.get_query_argument(name: str, default: Union[None, str, RAISE] = RAISE, strip: bool = True) -> Optional[str]
.. automethod:: RequestHandler.get_query_arguments
2018-12-30 16:48:43 +00:00
.. automethod:: RequestHandler.get_body_argument(name: str, default: Union[None, str, RAISE] = RAISE, strip: bool = True) -> Optional[str]
.. automethod:: RequestHandler.get_body_arguments
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.decode_argument
2011-06-17 05:36:33 +00:00
.. attribute:: RequestHandler.request
2014-02-23 20:57:18 +00:00
The `tornado.httputil.HTTPServerRequest` object containing additional
2011-06-17 05:36:33 +00:00
request parameters including e.g. headers and body data.
2011-06-11 21:35:54 +00:00
.. attribute:: RequestHandler.path_args
.. attribute:: RequestHandler.path_kwargs
The ``path_args`` and ``path_kwargs`` attributes contain the
positional and keyword arguments that are passed to the
:ref:`HTTP verb methods <verbs>`. These attributes are set
before those methods are called, so the values are available
during `prepare`.
2017-03-26 21:10:47 +00:00
.. automethod:: RequestHandler.data_received
2011-06-11 21:35:54 +00:00
Output
^^^^^^
.. automethod:: RequestHandler.set_status
.. automethod:: RequestHandler.set_header
2011-09-04 22:39:55 +00:00
.. automethod:: RequestHandler.add_header
.. automethod:: RequestHandler.clear_header
.. automethod:: RequestHandler.set_default_headers
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.write
.. automethod:: RequestHandler.flush
.. automethod:: RequestHandler.finish
.. automethod:: RequestHandler.render
.. automethod:: RequestHandler.render_string
.. automethod:: RequestHandler.get_template_namespace
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.redirect
.. automethod:: RequestHandler.send_error
.. automethod:: RequestHandler.write_error
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.clear
2017-03-26 21:10:47 +00:00
.. automethod:: RequestHandler.render_linked_js
.. automethod:: RequestHandler.render_embed_js
.. automethod:: RequestHandler.render_linked_css
.. automethod:: RequestHandler.render_embed_css
2011-06-11 21:35:54 +00:00
Cookies
^^^^^^^
.. autoattribute:: RequestHandler.cookies
.. automethod:: RequestHandler.get_cookie
.. automethod:: RequestHandler.set_cookie
.. automethod:: RequestHandler.clear_cookie
.. automethod:: RequestHandler.clear_all_cookies
.. automethod:: RequestHandler.get_signed_cookie
.. automethod:: RequestHandler.get_signed_cookie_key_version
.. automethod:: RequestHandler.set_signed_cookie
.. method:: RequestHandler.get_secure_cookie
Deprecated alias for ``get_signed_cookie``.
.. deprecated:: 6.3
.. method:: RequestHandler.get_secure_cookie_key_version
Deprecated alias for ``get_signed_cookie_key_version``.
.. deprecated:: 6.3
.. method:: RequestHandler.set_secure_cookie
Deprecated alias for ``set_signed_cookie``.
.. deprecated:: 6.3
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.create_signed_value
.. autodata:: MIN_SUPPORTED_SIGNED_VALUE_VERSION
.. autodata:: MAX_SUPPORTED_SIGNED_VALUE_VERSION
.. autodata:: DEFAULT_SIGNED_VALUE_VERSION
.. autodata:: DEFAULT_SIGNED_VALUE_MIN_VERSION
2011-06-11 21:35:54 +00:00
Other
^^^^^
2011-06-17 05:36:33 +00:00
.. attribute:: RequestHandler.application
The `Application` object serving this request
.. automethod:: RequestHandler.check_etag_header
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.check_xsrf_cookie
.. automethod:: RequestHandler.compute_etag
.. automethod:: RequestHandler.create_template_loader
2014-06-30 16:59:58 +00:00
.. autoattribute:: RequestHandler.current_user
2018-05-05 18:56:47 +00:00
.. automethod:: RequestHandler.detach
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.get_browser_locale
.. automethod:: RequestHandler.get_current_user
.. automethod:: RequestHandler.get_login_url
.. automethod:: RequestHandler.get_status
.. automethod:: RequestHandler.get_template_path
.. automethod:: RequestHandler.get_user_locale
.. autoattribute:: RequestHandler.locale
2013-05-12 22:08:23 +00:00
.. automethod:: RequestHandler.log_exception
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.on_connection_close
.. automethod:: RequestHandler.require_setting
.. automethod:: RequestHandler.reverse_url
.. automethod:: RequestHandler.set_etag_header
2011-06-17 05:36:33 +00:00
.. autoattribute:: RequestHandler.settings
2011-06-11 21:35:54 +00:00
.. automethod:: RequestHandler.static_url
.. automethod:: RequestHandler.xsrf_form_html
.. autoattribute:: RequestHandler.xsrf_token
2011-06-09 08:15:56 +00:00
Application configuration
-------------------------
.. autoclass:: Application(handlers: Optional[List[Union[Rule, Tuple]]] = None, default_host: Optional[str] = None, transforms: Optional[List[Type[OutputTransform]]] = None, **settings)
2011-06-09 08:15:56 +00:00
.. attribute:: settings
Additional keyword arguments passed to the constructor are
saved in the `settings` dictionary, and are often referred to
in documentation as "application settings". Settings are
used to customize various aspects of Tornado (although in
some cases richer customization is possible by overriding
methods in a subclass of `RequestHandler`). Some
applications also like to use the `settings` dictionary as a
way to make application-specific settings available to
handlers without using global variables. Settings used in
Tornado are described below.
General settings:
2013-11-04 02:10:56 +00:00
* ``autoreload``: If ``True``, the server process will restart
when any source files change, as described in :ref:`debug-mode`.
This option is new in Tornado 3.2; previously this functionality
was controlled by the ``debug`` setting.
* ``debug``: Shorthand for several debug mode settings,
described in :ref:`debug-mode`. Setting ``debug=True`` is
equivalent to ``autoreload=True``, ``compiled_template_cache=False``,
``static_hash_cache=False``, ``serve_traceback=True``.
* ``default_handler_class`` and ``default_handler_args``:
This handler will be used if no other match is found;
use this to implement custom 404 pages (new in Tornado 3.2).
* ``compress_response``: If ``True``, responses in textual formats
will be compressed automatically. New in Tornado 4.0.
* ``gzip``: Deprecated alias for ``compress_response`` since
Tornado 4.0.
* ``log_function``: This function will be called at the end
of every request to log the result (with one argument, the
`RequestHandler` object). The default implementation
writes to the `logging` module's root logger. May also be
customized by overriding `Application.log_request`.
* ``serve_traceback``: If ``True``, the default error page
2013-11-04 02:10:56 +00:00
will include the traceback of the error. This option is new in
Tornado 3.2; previously this functionality was controlled by
the ``debug`` setting.
* ``ui_modules`` and ``ui_methods``: May be set to a mapping
of `UIModule` or UI methods to be made available to templates.
May be set to a module, dictionary, or a list of modules
and/or dicts. See :ref:`ui-modules` for more details.
* ``websocket_ping_interval``: If set to a number, all websockets will
be pinged every n seconds. This can help keep the connection alive
through certain proxy servers which close idle connections, and it
can detect if the websocket has failed without being properly closed.
* ``websocket_ping_timeout``: If the ping interval is set, and the
server doesn't receive a 'pong' in this many seconds, it will close
the websocket. The default is three times the ping interval, with a
minimum of 30 seconds. Ignored if the ping interval is not set.
Authentication and security settings:
* ``cookie_secret``: Used by `RequestHandler.get_signed_cookie`
and `.set_signed_cookie` to sign cookies.
* ``key_version``: Used by requestHandler `.set_signed_cookie`
2015-04-19 13:13:51 +00:00
to sign cookies with a specific key when ``cookie_secret``
is a key dictionary.
* ``login_url``: The `authenticated` decorator will redirect
to this url if the user is not logged in. Can be further
customized by overriding `RequestHandler.get_login_url`
* ``xsrf_cookies``: If ``True``, :ref:`xsrf` will be enabled.
* ``xsrf_cookie_version``: Controls the version of new XSRF
cookies produced by this server. Should generally be left
at the default (which will always be the highest supported
version), but may be set to a lower value temporarily
during version transitions. New in Tornado 3.2.2, which
introduced XSRF cookie version 2.
* ``xsrf_cookie_kwargs``: May be set to a dictionary of
additional arguments to be passed to `.RequestHandler.set_cookie`
for the XSRF cookie.
* ``xsrf_cookie_name``: Controls the name used for the XSRF
cookie (default ``_xsrf``). The intended use is to take
advantage of `cookie prefixes`_. Note that cookie prefixes
interact with other cookie flags, so they must be combined
with ``xsrf_cookie_kwargs``, such as
``{"xsrf_cookie_name": "__Host-xsrf", "xsrf_cookie_kwargs":
{"secure": True}}``
* ``twitter_consumer_key``, ``twitter_consumer_secret``,
``friendfeed_consumer_key``, ``friendfeed_consumer_secret``,
``google_consumer_key``, ``google_consumer_secret``,
``facebook_api_key``, ``facebook_secret``: Used in the
`tornado.auth` module to authenticate to various APIs.
.. _cookie prefixes: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes
Template settings:
* ``autoescape``: Controls automatic escaping for templates.
May be set to ``None`` to disable escaping, or to the *name*
of a function that all output should be passed through.
Defaults to ``"xhtml_escape"``. Can be changed on a per-template
basis with the ``{% autoescape %}`` directive.
2013-11-04 02:10:56 +00:00
* ``compiled_template_cache``: Default is ``True``; if ``False``
templates will be recompiled on every request. This option
is new in Tornado 3.2; previously this functionality was controlled
by the ``debug`` setting.
* ``template_path``: Directory containing template files. Can be
further customized by overriding `RequestHandler.get_template_path`
* ``template_loader``: Assign to an instance of
`tornado.template.BaseLoader` to customize template loading.
If this setting is used the ``template_path`` and ``autoescape``
settings are ignored. Can be further customized by overriding
`RequestHandler.create_template_loader`.
* ``template_whitespace``: Controls handling of whitespace in
templates; see `tornado.template.filter_whitespace` for allowed
values. New in Tornado 4.3.
Static file settings:
2013-11-04 02:10:56 +00:00
* ``static_hash_cache``: Default is ``True``; if ``False``
static urls will be recomputed on every request. This option
is new in Tornado 3.2; previously this functionality was controlled
by the ``debug`` setting.
* ``static_path``: Directory from which static files will be
served.
* ``static_url_prefix``: Url prefix for static files,
defaults to ``"/static/"``.
* ``static_handler_class``, ``static_handler_args``: May be set to
use a different handler for static files instead of the default
`tornado.web.StaticFileHandler`. ``static_handler_args``, if set,
should be a dictionary of keyword arguments to be passed to the
handler's ``initialize`` method.
2018-12-30 16:48:43 +00:00
.. automethod:: Application.listen
.. automethod:: Application.add_handlers(handlers: List[Union[Rule, Tuple]])
.. automethod:: Application.get_handler_delegate
.. automethod:: Application.reverse_url
.. automethod:: Application.log_request
2011-06-09 08:15:56 +00:00
.. autoclass:: URLSpec
The ``URLSpec`` class is also available under the name ``tornado.web.url``.
Decorators
----------
.. autofunction:: authenticated
.. autofunction:: addslash
.. autofunction:: removeslash
2014-04-27 03:56:16 +00:00
.. autofunction:: stream_request_body
2011-06-09 08:15:56 +00:00
Everything else
---------------
.. autoexception:: HTTPError
.. autoexception:: Finish
.. autoexception:: MissingArgumentError
.. autoclass:: UIModule
:members:
.. autoclass:: ErrorHandler
.. autoclass:: FallbackHandler
.. autoclass:: RedirectHandler
.. autoclass:: StaticFileHandler
:members: