<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 基于類的視圖 # 視圖是一個可調用對象,它接收一個請求然后返回一個響應。這個可調用對象可以不只是函數,Django 提供一些可以用作視圖的類。它們允許你結構化你的視圖并且利用繼承和混合重用代碼。后面我們將介紹一些用于簡單任務的通用視圖,但你可能想要設計自己的可重用視圖的結構以適合你的使用場景。完整的細節,請參見基于類的視圖的參考文檔。 + [基于類的視圖簡介](http://python.usyiyi.cn/django/topics/class-based-views/intro.html) + [內建的基于類的通用視圖](http://python.usyiyi.cn/django/topics/class-based-views/generic-display.html) + [使用基于類的視圖處理表單](http://python.usyiyi.cn/django/topics/class-based-views/generic-editing.html) + [使用混合來擴展視圖類](http://python.usyiyi.cn/django/topics/class-based-views/mixins.html) ## 基本的示例 ## Django 提供基本的視圖類,它們適用于廣泛的應用。所有的視圖類繼承自`View`類,它負責連接視圖到URL、HTTP 方法調度和其它簡單的功能。`RedirectView`用于簡單的HTTP 重定向,`TemplateView`擴展基類來渲染模板。 ## 在URLconf 中的簡單用法 ## 使用通用視圖最簡單的方法是在URLconf 中創建它們。如果你只是修改基于類的視圖的一些簡單屬性,你可以將它們直接傳遞給`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()`的參數將覆蓋類中的屬性。在這個例子中,我們設置`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.conf.urls import url from some_app.views import AboutView urlpatterns = [ url(r'^about/', AboutView.as_view()), ] ``` 關于如何使用內建的通用視圖的更多信息,參考下一主題通用的基于類的視圖。 ## 支持其它HTTP 方法 ## 假設有人想通過HTTP 訪問我們的書庫,它使用視圖作為API。這個API 客戶端將隨時連接并下載自上次訪問以來新出版的書籍的數據。如果沒有新的書籍,仍然從數據庫中獲取書籍、渲染一個完整的響應并發送給客戶端將是對CPU 和帶寬的浪費。如果有個API 用于查詢書籍最新發布的時間將會更好。 我們在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`模板)。但如果客戶端發出一個`HEAD`請求,響應將具有一個空的響應體而`Last-Modified`頭部會指示最新發布的書籍的時間。基于這個信息,客戶端可以下載或不下載完整的對象列表。 > 譯者:[Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html),原文:[Overview](https://docs.djangoproject.com/en/1.8/topics/class-based-views/)。 > > 本文以 [CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 協議發布,轉載請保留作者署名和文章出處。 > > [Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html)人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看