<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 編寫視圖 # 一個視圖函數,或者簡短來說叫做視圖,是一個簡單的Python函數,它接受web請求,并且返回web響應。響應可以是一張網頁的HTML內容,一個重定向,一個404錯誤,一個XML文檔,或者一張圖片. . . 是任何東西都可以。無論視圖本身包含什么邏輯,都要返回響應。代碼寫在哪里也無所謂,只要它在你的Python目錄下面。除此之外沒有更多的要求了——可以說“沒有什么神奇的地方”。為了能夠把代碼放在某個地方,慣例是把視圖放在叫做views.py的文件中,然后把它放到你的項目或者應用目錄里。 ## 一個簡單的視圖 ## 下面是一個返回當前日期和時間作為HTML文檔的視圖: ``` from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html) ``` 讓我們逐行閱讀上面的代碼: + 首先,我們從 django.http模塊導入了HttpResponse類,以及Python的datetime庫。 + 接著,我們定義了current_datetime函數。它是一個視圖函數。每個視圖函數都應接收HttpRequest對象作為第一個參數,一般叫做request。 + 注意視圖函數的名稱并不重要;不需要用一個統一的命名方式來命名,以便讓Django識別它。我們將其命名為current_datetime,是因為這個名稱能夠精確地反映出它的功能。 + 這個視圖會返回一個HttpResponse對象,其中包含生成的響應。每個視圖函數都要返回HttpResponse對象。(有例外,我們接下來會講。) > Django中的時區 > > Django中包含一個TIME_ZONE設置,默認為America/Chicago。可能并不是你住的地方,所以你可能會在設置文件里修改它。 ## 把你的URL映射到視圖 ## 所以,再重復一遍,這個視圖函數返回了一個包含當前日期和時間的HTML頁面。你需要創建URLconf來展示在特定的URL這一視圖; 詳見URL 分發器。 ## 返回錯誤 ## 在Django中返回HTTP錯誤是相當容易的。有一些HttpResponse的子類代表不是200(“OK”)的HTTP狀態碼。你可以在request/response文檔中找到所有可用的子類。你可以返回那些子類的一個實例,而不是普通的HttpResponse ,來表示一個錯誤。例如: ``` from django.http import HttpResponse, HttpResponseNotFound def my_view(request): # ... if foo: return HttpResponseNotFound('<h1>Page not found</h1>') else: return HttpResponse('<h1>Page was found</h1>') ``` 由于一些狀態碼不太常用,所以不是每個狀態碼都有一個特化的子類。然而,如HttpResponse文檔中所說的那樣,你也可以向HttpResponse的構造器傳遞HTTP狀態碼,來創建你想要的任何狀態碼的返回類。例如: ``` from django.http import HttpResponse def my_view(request): # ... # Return a "created" (201) response code. return HttpResponse(status=201) ``` 由于404錯誤是最常見的HTTP錯誤,所以處理這一錯誤的方式非常便利。 ## Http404異常 ## **class django.http.Http404** 當你返回一個像HttpResponseNotFound這樣的錯誤時,它會輸出這個錯誤頁面的HTML作為結果: ``` return HttpResponseNotFound('<h1>Page not found</h1>') ``` 為了便利起見,也因為你的站點有個一致的404頁面是個好主意,Django提供了Http404異常。如果你在視圖函數中的任何地方拋出Http404異常,Django都會捕獲它,并且帶上HTTP404錯誤碼返回你應用的標準錯誤頁面。 像這樣: ``` from django.http import Http404 from django.shortcuts import render_to_response from polls.models import Poll def detail(request, poll_id): try: p = Poll.objects.get(pk=poll_id) except Poll.DoesNotExist: raise Http404("Poll does not exist") return render_to_response('polls/detail.html', {'poll': p}) ``` 為了盡可能利用 Http404,你應該創建一個用來在404錯誤產生時展示的模板。這個模板應該叫做404.html,并且在你的模板樹中位于最頂層。 如果你在拋出Http404異常時提供了一條消息,當DEBUG為True時它會出現在標準404模板的展示中。你可以將這些消息用于調試;但他們通常不適用于404模板本身。 ## 自定義錯誤視圖 ## Django中默認的錯誤視圖對于大多數web應用已經足夠了,但是如果你需要任何自定義行為,重寫它很容易。只要在你的URLconf中指定下面的處理器(在其他任何地方設置它們不會有效)。 handler404覆蓋了page_not_found()視圖: ``` handler404 = 'mysite.views.my_custom_page_not_found_view' ``` handler500覆蓋了server_error()視圖: ``` handler500 = 'mysite.views.my_custom_error_view' ``` handler403覆蓋了permission_denied()視圖: ``` handler403 = 'mysite.views.my_custom_permission_denied_view' ``` handler400覆蓋了bad_request()視圖: ``` handler400 = 'mysite.views.my_custom_bad_request_view' ```
                  <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>

                              哎呀哎呀视频在线观看