如何在 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
,您只需添加您的回复即可
我的 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
,您只需添加您的回复即可