如何在 python/Django 中捕获 API 调用错误?

How to catch API call errors in python/Django?

我的 views.py 中有一个 Django 应用程序和这样的工作流程: 我的前端调用我的后端,它使用从前端接收的参数对外部 API 进行 API 调用。我将来自外部 API 的响应映射到我的序列化程序,并在将响应保存到数据库之前检查序列化程序是否有效。我需要帮助的是如何正确检查来自外部 API 的响应并捕获来自那里的任何错误?我可以只使用 try/except 吗?目前我不知道他们的确切反应,但我可以稍后澄清。

这是我的 class 来自 views.py:

    class Example(generics.ListCreateAPIView):
        permission_classes = (AllowAny,)
        serializer_class = ExampleSerializer
    
        def post(self, request, format=None):
            pin = request.data['pin']
            id = str(uuid.uuid4())
            post_obj = {'pin': pin, 'id': id}
            data = requests.post(url, data=json.dumps(post_obj))
            json_result = data.json()
            serializer = ExampleSerializer(data=json_result['data'])
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

您可以通过响应码处理

if data.response_code == 200:
   code goes here
else:
    handle error 

您可以在 API 文档中阅读有关响应代码的更多信息并根据它进行处理

根据请求,您可以使用提供的内置 raise_for_status:

from requests.exceptions import HTTPError

with requests.Session() as api:
    response = api.post(url, data=json.dumps(post_obj))
    try:
        api.raise_for_status()
    except HTTPError as e:
        return Response(
            {"api": "Cannot load API response"}, 
            status=status.HTTP_400_BAD_REQUEST
        )
json_result = response.json()

如果结果无效,这将引发 HTTPError,您只需添加您的回复即可