国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Django4.0 基于類(lèi)的視圖-基礎(chǔ)示例

2022-03-16 17:49 更新

Django 提供了適用于很多應(yīng)用的基本視圖類(lèi)。所有視圖繼承自 ?View ?類(lèi),它處理視圖鏈接到 ?URLs?,HTTP 方法調(diào)度和其他簡(jiǎn)單功能。?RedirectView ?用于 HTTP 重定向,?TemplateView? 擴(kuò)展基類(lèi)來(lái)使它能渲染模板。

在URLconf中的用法

使用通用視圖最直接的方式是在 ?URLconf ?中直接創(chuàng)建它們。如果你只在基于類(lèi)的視圖上改變一些屬性,那么你可以把它們傳遞到 ?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ù)將覆蓋在類(lèi)上設(shè)置的屬性。在這個(gè)例子中,我們?cè)??TemplateView ?上設(shè)置 ?template_name ?。一個(gè)相似的覆蓋模式可用于 ?RedirectView ?上的 url 屬性。

子類(lèi)化通用視圖

使用通用視圖更有力的方式是繼承已存在的視圖并覆蓋子類(lèi)里的屬性(比如 ?template_name ?)或方法(比如 ?get_context_data ?)來(lái)提供新的值或方法。例如,考慮只顯示一個(gè) ?about.html? 模板的視圖。Django 的 ?TemplateView ?可以完成這個(gè)工作,因此我們可以將其子類(lèi)化并重寫(xiě)模板名稱(chēng):

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

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

最后我們需要在 ?URLconf ?中添加這個(gè)新視圖。?TemplateView ?只是一個(gè)類(lèi),而不是一個(gè)函數(shù),因此我們將 URL 指向 ?as_view()? ,它為基于類(lèi)的視圖提供一個(gè)類(lèi)似函數(shù)的入口:

# urls.py
from django.urls import path
from some_app.views import AboutView

urlpatterns = [
    path('about/', AboutView.as_view()),
]

支持其他HTTP方法

如果某人想將視圖作為 API 來(lái)訪(fǎng)問(wèn)圖書(shū)館。API 客戶(hù)端會(huì)時(shí)不時(shí)地連接并下載上次訪(fǎng)問(wèn)過(guò)后出版的書(shū)籍?dāng)?shù)據(jù)。但如果沒(méi)有新的書(shū)籍出現(xiàn),那么從數(shù)據(jù)庫(kù)中獲取書(shū)籍,渲染一個(gè)完整響應(yīng)并發(fā)送它到客戶(hù)端的話(huà),這將浪費(fèi)CPU時(shí)間和帶寬。當(dāng)出版最新的書(shū)時(shí),它訪(fǎng)問(wèn) API 最好。

我們需要在 ?URLconf ?中映射 URL 到書(shū)籍列表視圖:

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 ?請(qǐng)求訪(fǎng)問(wèn)視圖,將在響應(yīng)(使用 ?book_list.html? 模板)中返回一個(gè)干凈的對(duì)象列表。但如果客戶(hù)端發(fā)出一個(gè) ?HEAD ?請(qǐng)求,那么將響應(yīng)一個(gè)空 ?body ?和 ?Last-Modified? 頭將標(biāo)識(shí)最新書(shū)籍的出版時(shí)間?;谶@些信息,客戶(hù)端可以選擇是否下載一個(gè)完整的對(duì)象類(lèi)。


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)