View Class — flask Architecture
Architecture documentation for the View class in views.py from the flask codebase.
Entity Profile
Dependency Diagram
graph TD 9f340103_2bf6_52ec_ab7a_db970d7ab419["View"] 25d123dc_627c_928a_300c_360bcb8e17f5["views.py"] 9f340103_2bf6_52ec_ab7a_db970d7ab419 -->|defined in| 25d123dc_627c_928a_300c_360bcb8e17f5 1dc2aad4_ad6c_f72a_12e6_6176ee94ff61["dispatch_request()"] 9f340103_2bf6_52ec_ab7a_db970d7ab419 -->|method| 1dc2aad4_ad6c_f72a_12e6_6176ee94ff61 eef2cf72_535a_c4db_9a08_d5ed4373f222["as_view()"] 9f340103_2bf6_52ec_ab7a_db970d7ab419 -->|method| eef2cf72_535a_c4db_9a08_d5ed4373f222
Relationship Graph
Source Code
src/flask/views.py lines 16–135
class View:
"""Subclass this class and override :meth:`dispatch_request` to
create a generic class-based view. Call :meth:`as_view` to create a
view function that creates an instance of the class with the given
arguments and calls its ``dispatch_request`` method with any URL
variables.
See :doc:`views` for a detailed guide.
.. code-block:: python
class Hello(View):
init_every_request = False
def dispatch_request(self, name):
return f"Hello, {name}!"
app.add_url_rule(
"/hello/<name>", view_func=Hello.as_view("hello")
)
Set :attr:`methods` on the class to change what methods the view
accepts.
Set :attr:`decorators` on the class to apply a list of decorators to
the generated view function. Decorators applied to the class itself
will not be applied to the generated view function!
Set :attr:`init_every_request` to ``False`` for efficiency, unless
you need to store request-global data on ``self``.
"""
#: The methods this view is registered for. Uses the same default
#: (``["GET", "HEAD", "OPTIONS"]``) as ``route`` and
#: ``add_url_rule`` by default.
methods: t.ClassVar[t.Collection[str] | None] = None
#: Control whether the ``OPTIONS`` method is handled automatically.
#: Uses the same default (``True``) as ``route`` and
#: ``add_url_rule`` by default.
provide_automatic_options: t.ClassVar[bool | None] = None
#: A list of decorators to apply, in order, to the generated view
#: function. Remember that ``@decorator`` syntax is applied bottom
#: to top, so the first decorator in the list would be the bottom
#: decorator.
#:
#: .. versionadded:: 0.8
decorators: t.ClassVar[list[t.Callable[..., t.Any]]] = []
#: Create a new instance of this view class for every request by
#: default. If a view subclass sets this to ``False``, the same
#: instance is used for every request.
#:
#: A single instance is more efficient, especially if complex setup
#: is done during init. However, storing data on ``self`` is no
#: longer safe across requests, and :data:`~flask.g` should be used
#: instead.
#:
#: .. versionadded:: 2.2
init_every_request: t.ClassVar[bool] = True
def dispatch_request(self) -> ft.ResponseReturnValue:
"""The actual view function behavior. Subclasses must override
this and return a valid response. Any variables from the URL
rule are passed as keyword arguments.
"""
raise NotImplementedError()
@classmethod
def as_view(
cls, name: str, *class_args: t.Any, **class_kwargs: t.Any
) -> ft.RouteCallable:
"""Convert the class into a view function that can be registered
for a route.
By default, the generated view will create a new instance of the
view class for every request and call its
:meth:`dispatch_request` method. If the view class sets
:attr:`init_every_request` to ``False``, the same instance will
be used for every request.
Domain
Defined In
Source
Frequently Asked Questions
What is the View class?
View is a class in the flask codebase, defined in src/flask/views.py.
Where is View defined?
View is defined in src/flask/views.py at line 16.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free