Class-Based Views โ
Changelog
New in version 0.7.
class flask.views.View โ
Subclass this class and override dispatch_request() to create a generic class-based view. Call as_view() to create a view function that creates an instance of the class with the given arguments and calls its ยท method with any URL variables.
See Class-based Views for a detailed guide.
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")
)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 methods on the class to change what methods the view accepts.
Set 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 init_every_request to False for efficiency, unless you need to store request-global data on self.
classmethodas_view(name, *class_args, **class_kwargs) โ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
dispatch_request()method. If the view class setsinit_every_requesttoFalse, the same instance will be used for every request.Except for
name, all other arguments passed to this method are forwarded to the view class__init__method.Changelog
Changed in version 2.2: Added the
init_every_requestclass attribute.Parameters:
name (str)โclass_args (t.Any)โclass_kwargs (t.Any)โ
Return type:
ft.RouteCallabledecorators:
ClassVar[list[Callable]] = []โA list of decorators to apply, in order, to the generated view function. Remember that
@decoratorsyntax is applied bottom to top, so the first decorator in the list would be the bottom decorator.Changelog
New in version 0.8.
dispatch_request() โ
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.
Return type:
ft.ResponseReturnValueinit_every_request:
ClassVar[bool] = Trueโ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
selfis no longer safe across requests, andgshould be used instead.Changelog
New in version 2.2.
methods:
ClassVar[Collection[str] | None] = NoneโThe methods this view is registered for. Uses the same default (
["GET", "HEAD", "OPTIONS"]) as route andadd_url_ruleby default.provide_automatic_options:
ClassVar[bool | None] = NoneโControl whether the
OPTIONSmethod is handled automatically. Uses the same default (True) asrouteandadd_url_ruleby default.
class flask.views.MethodView โ
Dispatches request methods to the corresponding instance methods. For example, if you implement a get method, it will be used to handle GET requests.
This can be useful for defining a REST API.
methods is automatically set based on the methods defined on the class.
See Class-based Views for a detailed guide.
class CounterAPI(MethodView):
def get(self):
return str(session.get("counter", 0))
def post(self):
session["counter"] = session.get("counter", 0) + 1
return redirect(url_for("counter"))
app.add_url_rule(
"/counter", view_func=CounterAPI.as_view("counter")
)class CounterAPI(MethodView):
def get(self):
return str(session.get("counter", 0))
def post(self):
session["counter"] = session.get("counter", 0) + 1
return redirect(url_for("counter"))
app.add_url_rule(
"/counter", view_func=CounterAPI.as_view("counter")
)dispatch_request(
**kwargs) โ
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.
Parameters:
kwargs (t.Any)โ
Return type: ft.ResponseReturnValue