Я столкнулся с внутренней ошибкой сервера 500 при попытке отправить запрос POST в API Django для создания объекта. Я проверил свой код, но не могу определить источник проблемы.
Вот код, который я использую:
Сериализаторclass DeliverableSerializer(serializers.ModelSerializer):
class Meta:
model = Deliverable
fields = ("num", "project", "reviewer", "deliverable_type", "description", "due_date",
"id", "draft")
Просмотры
class DeliverableAPIView(APIView):
def post(self, request, format=None):
serializer = DeliverableSerializer(data=request.data)
if serializer.is_valid():
instance = serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, pk, format=None):
try:
deliverable = Deliverable.objects.get(pk=pk)
serializer = DeliverableSerializer(deliverable, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
return Response({"error": "An unexpected error occurred."}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
URL-адреса
path('api/deliverables/', DeliverableAPIView.as_view(), name='deliverable-list'), # For POST
path('api/deliverables//', DeliverableAPIView.as_view(), name='deliverable-detail'), # For PUT
POST-запрос в моем скрипте
def post_data(endpoint, data):
"""Send data to the API via POST request."""
try:
response = requests.post(API_URL + endpoint, json=data, timeout=10)
response.raise_for_status() # Raises an HTTPError for bad responses
return response.json() # Return the JSON response if needed
except requests.exceptions.HTTPError as err:
raise Exception(f"HTTP error occurred while posting to {endpoint}: {err}") # For HTTP errors
except requests.exceptions.RequestException as err:
raise Exception(f"Error posting data to {endpoint}: {err}")
Когда я пытаюсь отправить запрос POST на конечную точку /api/deliverables/, выдается ошибка 500. Я также пробовал использовать Postman, но не могу протестировать его должным образом из-за ограничений на локальном хосте.
Я проверил, что данные моего запроса соответствуют полям сериализатора и модель настроена правильно. Каковы могут быть причины этой ошибки 500 и как ее диагностировать?
Заранее благодарим за помощь.
Я попробовал отправить запрос POST к моему API Django в конечной точке /api/deliverables/ с использованием скрипта и Postman. Я ожидал, что API примет данные в соответствии с моим DeliverableSerializer и создаст новый объект Deliverable в базе данных. Однако вместо успешного создания объекта я получил внутреннюю ошибку сервера 500, указывающую на то, что на стороне сервера что-то пошло не так.
Вот структура данных, которые я отправляю в запросе. :
{
"num": 1,
"project": 1, # ID of the project
"reviewer": 2, # ID of the reviewer
"deliverable_type": 3, # ID of the deliverable type
"description": "This is a test deliverable.",
"due_date": pd.to_datetime(row['Due Date'], errors='coerce').date().strftime('%Y-%m-%d')
"id": "folder_id_123",
"draft": true # Boolean value
}
Я также проверил данные запроса и убедился, что они соответствуют ожидаемым полям в сериализаторе, но ошибка не устранена.
Вот ошибка Я получил обратную трассировку:
/app # python manage.py runscript import_deliverables_test_test --script-args "ficheexcel.xlsx"
Importing Deliverables
Processing index 2, tag AB0
Exception while running run() in 'scripts.import_deliverables_test_test'
Traceback (most recent call last):
File "/app/scripts/import_deliverables_test_test.py", line 38, in post_data
response.raise_for_status() # Raises an HTTPError for bad responses
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/requests/models.py", line 1024, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http://localhost:8000/api/deliverables/
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/app/scripts/import_deliverables_test_test.py", line 222, in run
new_deliverable_response = post_data('deliverables/', deliverable_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/scripts/import_deliverables_test_test.py", line 41, in post_data
raise Exception(f"HTTP error occurred while posting to {endpoint}: {err}") # For HTTP errors
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exception: HTTP error occurred while posting to deliverables/: 500 Server Error: Internal Server Error for url: http://localhost:8000/api/deliverables/
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/app/manage.py", line 22, in
main()
File "/app/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.12/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.12/site-packages/django/core/management/__init__.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.12/site-packages/django_extensions/management/email_notifications.py", line 65, in run_from_argv
super().run_from_argv(argv)
File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 413, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.12/site-packages/django_extensions/management/email_notifications.py", line 77, in execute
super().execute(*args, **options)
File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 459, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django_extensions/management/utils.py", line 62, in inner
ret = func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django_extensions/management/commands/runscript.py", line 281, in handle
run_script(script_mod, *script_args)
File "/usr/local/lib/python3.12/site-packages/django_extensions/management/commands/runscript.py", line 159, in run_script
exit_code = mod.run(*script_args)
^^^^^^^^^^^^^^^^^^^^^
File "/app/scripts/import_deliverables_test_test.py", line 225, in run
raise Exception(f"Failed to create deliverable {tag}: {str(e)}")
Exception: Failed to create deliverable AB0: HTTP error occurred while posting to deliverables/: 500 Server Error: Internal Server Error for url: http://localhost:8000/api/deliverables/
Подробнее здесь: https://stackoverflow.com/questions/790 ... st-request
Обнаружение внутренней ошибки сервера 500 при POST-запросе API Django ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение