新聞中心
Django 提供了適用于很多應用的基本視圖類。所有視圖繼承自 ?View?類,它處理視圖鏈接到 ?URLs?,HTTP 方法調度和其他簡單功能。?RedirectView?用于 HTTP 重定向,?TemplateView? 擴展基類來使它能渲染模板。

在URLconf中的用法
使用通用視圖最直接的方式是在 ?URLconf?中直接創(chuàng)建它們。如果你只在基于類的視圖上改變一些屬性,那么你可以把它們傳遞到 ?as_view()? 方法中調用:
from django.urls import path
from django.views.generic import TemplateView
urlpatterns = [
path('about/', TemplateView.as_view(template_name="about.html")),
]任何傳遞到 ?as_view()? 的參數將覆蓋在類上設置的屬性。在這個例子中,我們在 ?TemplateView?上設置 ?template_name?。一個相似的覆蓋模式可用于 ?RedirectView?上的 url 屬性。
子類化通用視圖
使用通用視圖更有力的方式是繼承已存在的視圖并覆蓋子類里的屬性(比如 ?template_name?)或方法(比如 ?get_context_data?)來提供新的值或方法。例如,考慮只顯示一個 ?about.html? 模板的視圖。Django 的 ?TemplateView?可以完成這個工作,因此我們可以將其子類化并重寫模板名稱:
# some_app/views.py
from django.views.generic import TemplateView
class AboutView(TemplateView):
template_name = "about.html"最后我們需要在 ?URLconf?中添加這個新視圖。?TemplateView?只是一個類,而不是一個函數,因此我們將 URL 指向 ?as_view()? ,它為基于類的視圖提供一個類似函數的入口:
# urls.py
from django.urls import path
from some_app.views import AboutView
urlpatterns = [
path('about/', AboutView.as_view()),
]支持其他HTTP方法
如果某人想將視圖作為 API 來訪問圖書館。API 客戶端會時不時地連接并下載上次訪問過后出版的書籍數據。但如果沒有新的書籍出現,那么從數據庫中獲取書籍,渲染一個完整響應并發(fā)送它到客戶端的話,這將浪費CPU時間和帶寬。當出版最新的書時,它訪問 API 最好。
我們需要在 ?URLconf?中映射 URL 到書籍列表視圖:
from django.urls import path
from books.views import BookListView
urlpatterns = [
path('books/', BookListView.as_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.
headers={'Last-Modified': last_book.publication_date.strftime('%a, %d %b %Y %H:%M:%S GMT')},
)
return response如果從 ?GET?請求訪問視圖,將在響應(使用 ?book_list.html? 模板)中返回一個干凈的對象列表。但如果客戶端發(fā)出一個 ?HEAD?請求,那么將響應一個空 ?body?和 ?Last-Modified? 頭將標識最新書籍的出版時間?;谶@些信息,客戶端可以選擇是否下載一個完整的對象類。
網站名稱:創(chuàng)新互聯Django4.0教程:Django4.0 基于類的視圖-基礎示例
標題鏈接:http://www.5511xx.com/article/cddjooc.html


咨詢
建站咨詢
