在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

基于類的視圖

視圖是一個可調用對象,它接收一個請求然后返回一個響應。這個可調用對象可以不只是函數(shù),Django 提供一些可以用作視圖的類。它們允許你結構化你的視圖并且利用繼承和混合重用代碼。后面我們將介紹一些用于簡單任務的通用視圖,但你可能想要設計自己的可重用視圖的結構以適合你的使用場景。完整的細節(jié),請參見基于類的視圖的參考文檔。

基本的示例

Django 提供基本的視圖類,它們適用于廣泛的應用。所有的視圖類繼承自View類,它負責連接視圖到URL、HTTP 方法調度和其它簡單的功能。RedirectView用于簡單的HTTP 重定向,TemplateView擴展基類來渲染模板。

在URLconf 中的簡單用法

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

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ù)將覆蓋類中的屬性。在這個例子中,我們設置TemplateViewtemplate_name??梢允褂妙愃频姆椒ǜ采wRedirectViewurl屬性。

子類化通用視圖

第二種,功能更強一點的使用通用視圖的方式是繼承一個已經(jīng)存在的視圖并在子類中覆蓋其屬性(例如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.conf.urls import url
from some_app.views import AboutView

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

關于如何使用內建的通用視圖的更多信息,參考下一主題通用的基于類的視圖。

支持其它HTTP 方法

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

我們在URLconf 中映射URL 到書籍列表視圖:

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

urlpatterns = [
    url(r'^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
        response['Last-Modified'] = last_book.publication_date.strftime('%a, %d %b %Y %H:%M:%S GMT')
        return response

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

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

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

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

上一篇:管理器下一篇:基礎