Django - 如何建立及測試 404/500 Error Page

本文要來說明如何使用 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