鍍金池/ 教程/ Python/ 基于類的視圖
點(diǎn)擊劫持保護(hù)
安全問題歸檔
Model 類參考
將遺留數(shù)據(jù)庫整合到Django
關(guān)聯(lián)對(duì)象參考
內(nèi)建基于類的視圖的API
聚合
Django 中的用戶認(rèn)證
django.contrib.humanize
Django管理文檔生成器
分頁
使用Django輸出CSV
加密簽名
文件儲(chǔ)存API
安全
Django中的測(cè)試
國際化和本地化
為Django編寫首個(gè)補(bǔ)丁
條件表達(dá)式
日志
模型元選項(xiàng)
部署靜態(tài)文件
執(zhí)行查詢
使用Django認(rèn)證系統(tǒng)
基于類的視圖
中間件
編寫自定義的django-admin命令
Django 的設(shè)置
格式本地化
數(shù)據(jù)庫訪問優(yōu)化
錯(cuò)誤報(bào)告
基于類的內(nèi)建通用視圖
編寫自定義存儲(chǔ)系統(tǒng)
編寫你的第一個(gè) Django 程序 第3部分
編寫數(shù)據(jù)庫遷移
使用表單
編寫你的第一個(gè) Django 程序 第2部分
編寫你的第一個(gè) Django 程序 第1部分
如何使用會(huì)話
系統(tǒng)檢查框架
新手入門
信號(hào)
編寫視圖
如何使用WSGI 部署
編寫你的第一個(gè)Django應(yīng)用,第6部分
常見的網(wǎng)站應(yīng)用工具
Widgets
內(nèi)建的視圖
模型實(shí)例參考
視圖層
Django中的密碼管理
高級(jí)教程:如何編寫可重用的應(yīng)用
國際化和本地化
"本地特色"附加功能
TemplateResponse 和 SimpleTemplateResponse
模式編輯器
文件上傳
快速安裝指南
部署 Django
表單 API
表單素材 ( <code>Media</code> 類)
管理文件
其它核心功能
查找 API 參考
表單
Admin
數(shù)據(jù)庫函數(shù)
自定義查找
使用基于類的視圖處理表單
管理操作
開發(fā)過程
編寫你的第一個(gè)Django應(yīng)用,第5部分
進(jìn)行原始的sql查詢
模型層
多數(shù)據(jù)庫
編寫你的第一個(gè) Django 程序 第4部分
Django安全
Django 初探
Django異常
重定向應(yīng)用
按需內(nèi)容處理
管理器
視圖裝飾器
驗(yàn)證器
使用Django輸出PDF
File對(duì)象
Django 的快捷函數(shù)
基于類的通用視圖 —— 索引
為模型提供初始數(shù)據(jù)
模板層
URL調(diào)度器
中間件
模型

基于類的視圖

視圖是一個(gè)可調(diào)用對(duì)象,它接收一個(gè)請(qǐng)求然后返回一個(gè)響應(yīng)。這個(gè)可調(diào)用對(duì)象可以不只是函數(shù),Django 提供一些可以用作視圖的類。它們?cè)试S你結(jié)構(gòu)化你的視圖并且利用繼承和混合重用代碼。后面我們將介紹一些用于簡單任務(wù)的通用視圖,但你可能想要設(shè)計(jì)自己的可重用視圖的結(jié)構(gòu)以適合你的使用場(chǎng)景。完整的細(xì)節(jié),請(qǐng)參見基于類的視圖的參考文檔。

基本的示例

Django 提供基本的視圖類,它們適用于廣泛的應(yīng)用。所有的視圖類繼承自View類,它負(fù)責(zé)連接視圖到URL、HTTP 方法調(diào)度和其它簡單的功能。RedirectView用于簡單的HTTP 重定向,TemplateView擴(kuò)展基類來渲染模板。

在URLconf 中的簡單用法

使用通用視圖最簡單的方法是在URLconf 中創(chuàng)建它們。如果你只是修改基于類的視圖的一些簡單屬性,你可以將它們直接傳遞給as_view()方法調(diào)用:

from django.conf.urls import url
from django.views.generic import TemplateView

urlpatterns = [
    url(r'^about/', TemplateView.as_view(template_name="about.html")),
]

傳遞給as_view()的參數(shù)將覆蓋類中的屬性。在這個(gè)例子中,我們?cè)O(shè)置TemplateViewtemplate_name??梢允褂妙愃频姆椒ǜ采wRedirectViewurl屬性。

子類化通用視圖

第二種,功能更強(qiáng)一點(diǎn)的使用通用視圖的方式是繼承一個(gè)已經(jīng)存在的視圖并在子類中覆蓋其屬性(例如template_name)或方法(例如get_context_data)以提供新的值或方法。例如,考慮只顯示一個(gè)模板about.html的視圖。Django 有一個(gè)通用視圖TemplateView來做這件事,所以我們可以簡單地子類化它,并覆蓋模板的名稱:

# some_app/views.py
from django.views.generic import TemplateView

class AboutView(TemplateView):
    template_name = "about.html"

然后我們只需要添加這個(gè)新的視圖到我們的URLconf 中。TemplateView是一個(gè)類不是一個(gè)函數(shù),所以我們將URL 指向類的as_view()方法,它讓基于類的視圖提供一個(gè)類似函數(shù)的入口:

# urls.py
from django.conf.urls import url
from some_app.views import AboutView

urlpatterns = [
    url(r'^about/', AboutView.as_view()),
]

關(guān)于如何使用內(nèi)建的通用視圖的更多信息,參考下一主題通用的基于類的視圖。

支持其它HTTP 方法

假設(shè)有人想通過HTTP 訪問我們的書庫,它使用視圖作為API。這個(gè)API 客戶端將隨時(shí)連接并下載自上次訪問以來新出版的書籍的數(shù)據(jù)。如果沒有新的書籍,仍然從數(shù)據(jù)庫中獲取書籍、渲染一個(gè)完整的響應(yīng)并發(fā)送給客戶端將是對(duì)CPU 和帶寬的浪費(fèi)。如果有個(gè)API 用于查詢書籍最新發(fā)布的時(shí)間將會(huì)更好。

我們?cè)赨RLconf 中映射URL 到書籍列表視圖:

from django.conf.urls import url
from books.views import BookListView

urlpatterns = [
    url(r'^books/$', BookListView.as_view()),
]

下面是這個(gè)視圖:

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

如果該視圖從GET 請(qǐng)求訪問,將在響應(yīng)中返回一個(gè)普通而簡單的對(duì)象列表(使用book_list.html模板)。但如果客戶端發(fā)出一個(gè)HEAD請(qǐng)求,響應(yīng)將具有一個(gè)空的響應(yīng)體而Last-Modified頭部會(huì)指示最新發(fā)布的書籍的時(shí)間?;谶@個(gè)信息,客戶端可以下載或不下載完整的對(duì)象列表。

譯者:Django 文檔協(xié)作翻譯小組,原文:Overview

本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉(zhuǎn)載請(qǐng)保留作者署名和文章出處。

Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質(zhì)。交流群:467338606。

上一篇:自定義查找下一篇:文件上傳