Django Rest Framework 入門指南:如何正確處理 HTTP 狀態碼

更新日期: 2025 年 1 月 29 日

無論你是剛接觸 DRF,還是想要提升程式碼的可讀性與維護性,掌握正確處理 HTTP 狀態碼的方式都很重要。在 DRF 中,處理狀態碼時通常有兩種方法:

  1. 使用數字(如 status=400)。
  2. 使用 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 狀態碼的意圖與用途!

Similar Posts