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

鍍金池/ 教程/ Python/ 編寫視圖
點(diǎn)擊劫持保護(hù)
安全問題歸檔
Model 類參考
將遺留數(shù)據(jù)庫整合到Django
關(guān)聯(lián)對象參考
內(nèi)建基于類的視圖的API
聚合
Django 中的用戶認(rèn)證
django.contrib.humanize
Django管理文檔生成器
分頁
使用Django輸出CSV
加密簽名
文件儲存API
安全
Django中的測試
國際化和本地化
為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)建通用視圖
編寫自定義存儲系統(tǒng)
編寫你的第一個(gè) Django 程序 第3部分
編寫數(shù)據(jù)庫遷移
使用表單
編寫你的第一個(gè) Django 程序 第2部分
編寫你的第一個(gè) Django 程序 第1部分
如何使用會話
系統(tǒng)檢查框架
新手入門
信號
編寫視圖
如何使用WSGI 部署
編寫你的第一個(gè)Django應(yīng)用,第6部分
常見的網(wǎng)站應(yīng)用工具
Widgets
內(nèi)建的視圖
模型實(shí)例參考
視圖層
Django中的密碼管理
高級教程:如何編寫可重用的應(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對象
Django 的快捷函數(shù)
基于類的通用視圖 —— 索引
為模型提供初始數(shù)據(jù)
模板層
URL調(diào)度器
中間件
模型

編寫視圖

一個(gè)視圖函數(shù),或者簡短來說叫做視圖,是一個(gè)簡單的Python函數(shù),它接受web請求,并且返回web響應(yīng)。響應(yīng)可以是一張網(wǎng)頁的HTML內(nèi)容,一個(gè)重定向,一個(gè)404錯(cuò)誤,一個(gè)XML文檔,或者一張圖片. . . 是任何東西都可以。無論視圖本身包含什么邏輯,都要返回響應(yīng)。代碼寫在哪里也無所謂,只要它在你的Python目錄下面。除此之外沒有更多的要求了——可以說“沒有什么神奇的地方”。為了能夠把代碼放在某個(gè)地方,慣例是把視圖放在叫做views.py的文件中,然后把它放到你的項(xiàng)目或者應(yīng)用目錄里。

一個(gè)簡單的視圖

下面是一個(gè)返回當(dāng)前日期和時(shí)間作為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模塊導(dǎo)入了HttpResponse類,以及Python的datetime庫。
  • 接著,我們定義了current_datetime函數(shù)。它是一個(gè)視圖函數(shù)。每個(gè)視圖函數(shù)都應(yīng)接收HttpRequest對象作為第一個(gè)參數(shù),一般叫做request。
  • 注意視圖函數(shù)的名稱并不重要;不需要用一個(gè)統(tǒng)一的命名方式來命名,以便讓Django識別它。我們將其命名為current_datetime,是因?yàn)檫@個(gè)名稱能夠精確地反映出它的功能。
  • 這個(gè)視圖會返回一個(gè)HttpResponse對象,其中包含生成的響應(yīng)。每個(gè)視圖函數(shù)都要返回HttpResponse對象。(有例外,我們接下來會講。)

Django中的時(shí)區(qū)

Django中包含一個(gè)TIME_ZONE設(shè)置,默認(rèn)為America/Chicago??赡懿⒉皇悄阕〉牡胤剑阅憧赡軙谠O(shè)置文件里修改它。

把你的URL映射到視圖

所以,再重復(fù)一遍,這個(gè)視圖函數(shù)返回了一個(gè)包含當(dāng)前日期和時(shí)間的HTML頁面。你需要?jiǎng)?chuàng)建URLconf來展示在特定的URL這一視圖; 詳見URL 分發(fā)器。

返回錯(cuò)誤

在Django中返回HTTP錯(cuò)誤是相當(dāng)容易的。有一些HttpResponse的子類代表不是200(“OK”)的HTTP狀態(tài)碼。你可以在request/response文檔中找到所有可用的子類。你可以返回那些子類的一個(gè)實(shí)例,而不是普通的HttpResponse ,來表示一個(gè)錯(cuò)誤。例如:

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

由于一些狀態(tài)碼不太常用,所以不是每個(gè)狀態(tài)碼都有一個(gè)特化的子類。然而,如HttpResponse文檔中所說的那樣,你也可以向HttpResponse的構(gòu)造器傳遞HTTP狀態(tài)碼,來創(chuàng)建你想要的任何狀態(tài)碼的返回類。例如:

from django.http import HttpResponse

def my_view(request):
    # ...

    # Return a "created" (201) response code.
    return HttpResponse(status=201)

由于404錯(cuò)誤是最常見的HTTP錯(cuò)誤,所以處理這一錯(cuò)誤的方式非常便利。

Http404異常

class django.http.Http404

當(dāng)你返回一個(gè)像HttpResponseNotFound這樣的錯(cuò)誤時(shí),它會輸出這個(gè)錯(cuò)誤頁面的HTML作為結(jié)果:

return HttpResponseNotFound('<h1>Page not found</h1>')

為了便利起見,也因?yàn)槟愕恼军c(diǎn)有個(gè)一致的404頁面是個(gè)好主意,Django提供了Http404異常。如果你在視圖函數(shù)中的任何地方拋出Http404異常,Django都會捕獲它,并且?guī)螲TTP404錯(cuò)誤碼返回你應(yīng)用的標(biāo)準(zhǔn)錯(cuò)誤頁面。

像這樣:

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,你應(yīng)該創(chuàng)建一個(gè)用來在404錯(cuò)誤產(chǎn)生時(shí)展示的模板。這個(gè)模板應(yīng)該叫做404.html,并且在你的模板樹中位于最頂層。

如果你在拋出Http404異常時(shí)提供了一條消息,當(dāng)DEBUG為True時(shí)它會出現(xiàn)在標(biāo)準(zhǔn)404模板的展示中。你可以將這些消息用于調(diào)試;但他們通常不適用于404模板本身。

自定義錯(cuò)誤視圖

Django中默認(rèn)的錯(cuò)誤視圖對于大多數(shù)web應(yīng)用已經(jīng)足夠了,但是如果你需要任何自定義行為,重寫它很容易。只要在你的URLconf中指定下面的處理器(在其他任何地方設(shè)置它們不會有效)。

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'