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

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

編寫視圖

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

一個簡單的視圖

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

Django中的時區(qū)

Django中包含一個TIME_ZONE設(shè)置,默認(rèn)為America/Chicago。可能并不是你住的地方,所以你可能會在設(shè)置文件里修改它。

把你的URL映射到視圖

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

返回錯誤

在Django中返回HTTP錯誤是相當(dāng)容易的。有一些HttpResponse的子類代表不是200(“OK”)的HTTP狀態(tài)碼。你可以在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>')

由于一些狀態(tài)碼不太常用,所以不是每個狀態(tài)碼都有一個特化的子類。然而,如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錯誤是最常見的HTTP錯誤,所以處理這一錯誤的方式非常便利。

Http404異常

class django.http.Http404

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

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

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

像這樣:

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

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

自定義錯誤視圖

Django中默認(rèn)的錯誤視圖對于大多數(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'
上一篇:Django模版語言下一篇:教程