W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
Django 提供了適用于很多應(yīng)用的基本視圖類。所有視圖繼承自 ?View
?類,它處理視圖鏈接到 ?URLs
?,HTTP 方法調(diào)度和其他簡單功能。?RedirectView
?用于 HTTP 重定向,?TemplateView
? 擴(kuò)展基類來使它能渲染模板。
使用通用視圖最直接的方式是在 ?URLconf
?中直接創(chuàng)建它們。如果你只在基于類的視圖上改變一些屬性,那么你可以把它們傳遞到 ?as_view()
? 方法中調(diào)用:
from django.urls import path
from django.views.generic import TemplateView
urlpatterns = [
path('about/', TemplateView.as_view(template_name="about.html")),
]
任何傳遞到 ?as_view()
? 的參數(shù)將覆蓋在類上設(shè)置的屬性。在這個例子中,我們在 ?TemplateView
?上設(shè)置 ?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
?只是一個類,而不是一個函數(shù),因此我們將 URL 指向 ?as_view()
? ,它為基于類的視圖提供一個類似函數(shù)的入口:
# urls.py
from django.urls import path
from some_app.views import AboutView
urlpatterns = [
path('about/', AboutView.as_view()),
]
如果某人想將視圖作為 API 來訪問圖書館。API 客戶端會時不時地連接并下載上次訪問過后出版的書籍?dāng)?shù)據(jù)。但如果沒有新的書籍出現(xiàn),那么從數(shù)據(jù)庫中獲取書籍,渲染一個完整響應(yīng)并發(fā)送它到客戶端的話,這將浪費(fèi)CPU時間和帶寬。當(dāng)出版最新的書時,它訪問 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
?請求訪問視圖,將在響應(yīng)(使用 ?book_list.html
? 模板)中返回一個干凈的對象列表。但如果客戶端發(fā)出一個 ?HEAD
?請求,那么將響應(yīng)一個空 ?body
?和 ?Last-Modified
? 頭將標(biāo)識最新書籍的出版時間?;谶@些信息,客戶端可以選擇是否下載一個完整的對象類。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: