CrazyRyan
Django自訂HTTP錯誤碼及python自訂錯誤

在進行前後端程式串接的時候,會遇到需要自訂一些非程式類型的錯誤(像是輸入的資料與預期的產出大小不符),而這種錯誤又需要從後端傳出此資訊給前端,就有了以下實驗用的程式碼囉

class CustomError(Exception):
    pass

def test_error_message(input_data):
    print(input_data)
    if input_data == '1':
        raise CustomError("Error from test_error_message" + input_data)
    else:
        return input_data

@api_view(['POST'])
def test_api(request):
    request_data = json.loads(request.body)
    print(request_data)
    try:
        if request_data['test'] == '0':
            print ("TEST success")
            return Response({"message":'Error from test_api'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        elif request_data['test'] == '1':
            testdata = test_error_message(request_data['test'])
            print(testdata)
        elif request_data['test'] == '2':
            testdata = test_error_message(request_data['test'])
            testdata = int("abc")
            print(testdata)
        else:
            return Response(True)
    except CustomError as e:
        return Response({"Custom Error message":str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
    except Exception as e:
        return Response({"Python Error message":str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

先用 CustomError 先定義出一種錯誤class

test_error_message是用來模擬可能會抱錯的function

test_api是DJANGO用於接收回應API的function,所以如果今天輸入的json是

{“test”:”0”},會成功回傳500錯誤,並且回應{“message”:’Error from test_api’}

{“test”:”1”},會成功回傳500錯誤,並且回應{“Custom Error message”:’Error from test_error_message1’}

{“test”:”2”},會成功回傳500錯誤,並且回應{“Python Error message”:’int甚麼型態甚麼的XD’}

會發現一樣都可以得到500錯誤,但可以藉由不同的回應內容來辨別或追蹤錯誤發生在哪,提供給前端還不錯的體驗