mirror of
https://github.com/django/django.git
synced 2024-12-23 09:36:06 +00:00
Fixed #15906 - Documented HEAD method in CBVs; thanks zsiciarz for the patch.
This commit is contained in:
parent
72ca530af5
commit
518c582966
@ -71,6 +71,11 @@ View
|
||||
delegated to :meth:`~View.get()`, a ``POST`` to :meth:`~View.post()`,
|
||||
and so on.
|
||||
|
||||
By default, a ``HEAD`` request will be delegated to :meth:`~View.get()`.
|
||||
If you need to handle ``HEAD`` requests in a different way than ``GET``,
|
||||
you can override the :meth:`~View.head()` method. See
|
||||
:ref:`supporting-other-http-methods` for an example.
|
||||
|
||||
The default implementation also sets ``request``, ``args`` and
|
||||
``kwargs`` as instance variables, so any method on the view can know
|
||||
the full details of the request that was made to invoke the view.
|
||||
|
@ -84,6 +84,50 @@ function-like entry to class-based views::
|
||||
For more information on how to use the built in generic views, consult the next
|
||||
topic on :doc:`generic class based views</topics/class-based-views/generic-display>`.
|
||||
|
||||
.. _supporting-other-http-methods:
|
||||
|
||||
Supporting other HTTP methods
|
||||
-----------------------------
|
||||
|
||||
Suppose somebody wants to access our book library over HTTP using the views
|
||||
as an API. The API client would connect every now and then and download book
|
||||
data for the books published since last visit. But if no new books appeared
|
||||
since then, it is a waste of CPU time and bandwidth to fetch the books from the
|
||||
database, render a full response and send it to the client. It might be
|
||||
preferable to ask the API when the most recent book was published.
|
||||
|
||||
We map the URL to book list view in the URLconf::
|
||||
|
||||
from django.conf.urls import patterns
|
||||
from books.views import BookListView
|
||||
|
||||
urlpatterns = patterns('',
|
||||
(r'^books/$', BookListView.as_view()),
|
||||
)
|
||||
|
||||
And the view::
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.views.generic import ListView
|
||||
from books.models import Book
|
||||
|
||||
class BookListView(ListView):
|
||||
model = Book
|
||||
|
||||
def head(self, *args, **kwargs):
|
||||
last_book = self.get_queryset().latest('publication_date')
|
||||
response = HttpResponse('')
|
||||
# RFC 1123 date format
|
||||
response['Last-Modified'] = last_book.publication_date.strftime('%a, %d %b %Y %H:%M:%S GMT')
|
||||
return response
|
||||
|
||||
If the view is accessed from a ``GET`` request, a plain-and-simple object
|
||||
list is returned in the response (using ``book_list.html`` template). But if
|
||||
the client issues a ``HEAD`` request, the response has an empty body and
|
||||
the ``Last-Modified`` header indicates when the most recent book was published.
|
||||
Based on this information, the client may or may not download the full object
|
||||
list.
|
||||
|
||||
Decorating class-based views
|
||||
============================
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user