【问题标题】:How to catch API call errors in python/Django?如何在 python/Django 中捕获 API 调用错误?
【发布时间】:2021-06-29 09:55:26
【问题描述】:

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

这是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)

【问题讨论】:

    标签: python django error-handling response


    【解决方案1】:

    根据要求,您可以使用内置提供的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,您只需添加您的响应,它就会起作用

    【讨论】:

      【解决方案2】:

      您可以通过响应代码处理它

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-26
        • 1970-01-01
        • 2012-02-11
        • 2019-09-21
        • 2017-03-20
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        相关资源
        最近更新 更多