本文要來說明如何使用 Django 建立 404/500 error page 及他們的測試方法,因為 Django 在 DEBUG 為 True 和 False 時都有各自的麻煩之處,會導致開發者很難驗證這功能的正確性。
請看以下步驟來建立 Error Page 並做測試吧!
建立 404/500 Error Page
首先要在 view.py
檔內新增 handler404
及 handler500
函式,並各自導到屬於他們的畫面,response的status_code則代表系統應該要回應的 http status
是什麼。
handler404
及 handler500
是Djano已經定義好的功能,所以只要做到這裡,error page基本上已經是完成了。
def handler404(request):
response = render(request, 'error_page/404-error-page.html')
response.status_code = 404
return response
def handler500(request):
response = render(request, 'error_page/500-error-page.html')
response.status_code = 500
return response
DEBUG=True 時的 Error Page 測試
頁面設計好了,對應的處理也好了,總要來看一下是不是符合心中所期待的樣貌,在 DEBUG=True 情況下,我們可以在 urls.py
內建立路徑直接來看頁面是否正確,說穿了就是直接在網址後面接上 404 或 500 就導到頁面來檢視。
urlpatterns = [
url(r'^404/$', handler404),
url(r'^500/$', handler500),
]
看到這裡一定覺得很奇怪,為什麼 DEBUG=True 時不能直接進行測試,像是亂輸入網址來顯示 404 error page,是因為在 debug=True 時 Django 還是必須要導到 debug 頁面才真正幫助開發者。
DEBUG=False 時的 Error Page 測試
那好吧,我們總可以設定為 DEBUG=False 來進行測試,但會發現這時候又會遇到另一個問題,Django 在 DEBUG=False 時網站上的 static files 會無法正確載入,這樣會導致可以成功導到 error page,但是客倌啊,通通是沒有載入樣式的頁面!
這時的解決方式為使用以下方式來運行網站,一切問題都解決了!
python manage.py runserver --insecure
Error 500 的測試
Error 404 只要亂輸入網址就好,是很容易測試的,但500為 Internal Server Error
,當然是要在我們不預期的情況下發生,但如果是為了測試,則可以任意建立一個會出錯的函式。
以下為會出錯的範例,然後記得在 urls.py 加上路徑,這樣我們就可以透過觸發這個會出錯的功能來測試 error 500。
def test_handler500(request):
a = 1/0
print(a)
return request