Django Rest Framework 入門指南:如何正確處理 HTTP 狀態碼
更新日期: 2025 年 1 月 29 日
本文為 Django 登入註冊功能(後端)系列文,第 6 篇
- 新手指南|使用 Django 實現後端會員登入、註冊功能
- Django Rest Framework (DRF) 新手指南:為什麼選擇 DRF 建構 API?
- Django Rest Framework (DRF) 新手指南:用 ViewSets 快速構建 CRUD API
- 初學者指南:理解 Token 認證及其運作方式
- Django REST Framework (DRF) 認證方式、預設權限規則|新手指南
- Django Rest Framework 入門指南:如何正確處理 HTTP 狀態碼 👈所在位置
- 初學者指南:深入了解 Django 的 create_user 方法
- 新手指南:深入了解 Django 的 authenticate 方法
- Django REST Framework|@permission_classes指導手冊
- 使用 Postman 測試 Django 後端的註冊、登入與登出功能
無論你是剛接觸 DRF,還是想要提升程式碼的可讀性與維護性,掌握正確處理 HTTP 狀態碼的方式都很重要。在 DRF 中,處理狀態碼時通常有兩種方法:
- 使用數字(如
status=400
)。 - 使用 DRF 提供的常量(如
status=status.HTTP_400_BAD_REQUEST
)。
接下來,我們將分別介紹這兩種方式的特點與適用情境,幫助你在開發過程中做出最佳選擇。
兩種 HTTP 狀態碼寫法的比較
使用數字
寫法範例:
from rest_framework.response import Response
def example_view(request):
if not request.data.get('key'):
return Response({'error': '缺少必要的參數'}, status=400)
特點:
- 優點:
- 簡潔明瞭,特別是對熟悉 HTTP 狀態碼的開發者來說,這種寫法快速且直觀。
- 缺點:
- 語義不清晰:對於不熟悉 HTTP 狀態碼的開發者,需要查詢文件或記憶數字對應的含義。
- 易出錯:例如,可能不小心把
400
錯寫成404
。
使用常量
寫法範例:
from rest_framework.response import Response
from rest_framework import status
def example_view(request):
if not request.data.get('key'):
return Response({'error': '缺少必要的參數'}, status=status.HTTP_400_BAD_REQUEST)
特點:
- 優點:
- 語義清晰:常量名稱(如
HTTP_400_BAD_REQUEST
)直接說明了狀態碼的意圖。 - 減少錯誤:使用 IDE 的自動補全功能,可以避免數字手動輸入錯誤。
- 可讀性高:即使是新手,看到常量名稱也能快速理解其含義。
- 語義清晰:常量名稱(如
- 缺點:
- 稍顯繁瑣,相較於直接使用數字,需多寫一些字。
使用情境解析
使用數字
適合熟悉 HTTP 狀態碼的開發者,並且程式碼規模較小、邏輯較簡單時。
from rest_framework.response import Response
@api_view(['POST'])
def login(request):
data = request.data
if not data.get('username') or not data.get('password'):
return Response({'error': '缺少必要的參數'}, status=400) # 直接使用數字
使用常量
適合團隊開發或需要高可讀性的情境,特別是在大型專案中,統一標準非常重要。
from rest_framework.response import Response
from rest_framework import status
@api_view(['POST'])
def login(request):
data = request.data
if not data.get('username') or not data.get('password'):
return Response({'error': '缺少必要的參數'}, status=status.HTTP_400_BAD_REQUEST) # 使用常量
DRF 提供常量的優勢
Django Rest Framework 提供了一組狀態碼常量(rest_framework.status
模組),其目的是為了讓開發者更方便地處理 HTTP 狀態碼。
以下是使用常量的三大優勢:
提高程式碼可讀性
- 常量名稱直接反映了狀態碼的語義。例如:
status.HTTP_200_OK
:代表請求成功。status.HTTP_404_NOT_FOUND
:代表資源未找到。
- 對於不熟悉 HTTP 狀態碼的開發者,常量名稱比數字更直觀。
減少輸入錯誤
- 手動輸入數字時,可能會出現輸入錯誤,例如將
400
錯寫為404
。 - 使用常量時,IDE 可以提供自動補全功能,降低出錯機率。
統一與標準化
- 在團隊開發中,統一使用常量可以避免不同開發者混用數字與常量,讓程式碼更具一致性,便於維護。
哪種寫法更推薦?
寫法 | 優點 | 缺點 | 適用場合 |
---|---|---|---|
status=400 | 簡潔明瞭 | 可讀性低,需要記住數字含義 | 簡單場景,個人或小型專案開發時 |
status=status.HTTP_400_BAD_REQUEST | 語義清晰,降低錯誤率,便於團隊合作 | 稍微繁瑣 | 團隊開發、大型專案,統一程式風格 |
建議:優先使用常量
在大多數情況下,使用常量(status.HTTP_XXX
)是更推薦的選擇,特別是當你開發一個需要團隊合作或長期維護的專案時。
小結
- 使用 數字 是一種快速但不直觀的方式,適合熟悉 HTTP 狀態碼的小型專案。
- 使用 常量 是一種清晰且可維護性高的方式,適合大型專案或團隊開發。
- Django Rest Framework 提供的常量模組(
rest_framework.status
)可以顯著提高程式碼的可讀性、降低錯誤率,並促進程式碼風格的一致性。
如果你是一名新手,建議從使用常量開始,這樣不僅能讓程式碼更容易被理解,也能幫助你快速熟悉 HTTP 狀態碼的意圖與用途!