Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions docs/api-guide/views.md
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes in this file were rejected in #9882 please don't submit them again

Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ source:
>
> — [Reinout van Rees][cite]

REST framework provides an `APIView` class, which subclasses Django's `View` class.
REST framework provides an `APIView` class, which subclasses Django’s base `View` class.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe "inherits" ?



`APIView` classes are different from regular `View` classes in the following ways:

Expand All @@ -19,7 +20,9 @@ REST framework provides an `APIView` class, which subclasses Django's `View` cla
* Any `APIException` exceptions will be caught and mediated into appropriate responses.
* Incoming requests will be authenticated and appropriate permission and/or throttle checks will be run before dispatching the request to the handler method.

Using the `APIView` class is pretty much the same as using a regular `View` class, as usual, the incoming request is dispatched to an appropriate handler method such as `.get()` or `.post()`. Additionally, a number of attributes may be set on the class that control various aspects of the API policy.
Using the `APIView` class is very similar to using a regular Django `View` class.
As usual, the incoming request is dispatched to an appropriate handler method such as `.get()` or `.post()`.


For example:

Expand Down
17 changes: 15 additions & 2 deletions rest_framework/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -490,9 +490,22 @@ def raise_uncaught_exception(self, exc):
# be overridden.
def dispatch(self, request, *args, **kwargs):
"""
`.dispatch()` is pretty much the same as Django's regular dispatch,
but with extra hooks for startup, finalize, and exception handling.
Dispatch the incoming request to the appropriate handler method.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's good, mentioning the flow is actually a good point

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that's definitely an improvement


This method implements the core request/response lifecycle for
Django REST Framework views:

1. Wraps the incoming Django HttpRequest in a REST framework Request.
2. Performs content negotiation, authentication, permission, and
throttling checks.
3. Resolves and calls the appropriate HTTP method handler
(e.g. get(), post(), put()).
4. Handles any exceptions raised during processing and converts
them into appropriate Response objects.
5. Finalizes and returns the response with proper rendering
and headers applied.
"""

self.args = args
self.kwargs = kwargs
request = self.initialize_request(request, *args, **kwargs)
Expand Down