From 87fe9d5c2c1f48daaa880af3ff162147703948f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Mon, 1 Dec 2025 15:14:50 +0300 Subject: [PATCH] =?UTF-8?q?debug:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=B4=D1=80=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=20employee=5Fedit=20=D0=B8=20employ?= =?UTF-8?q?ee=5Fedit=5Fme=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B0=D0=B2=D0=B0=D1=82=D0=B0=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/employees/views_front.py | 48 +++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/backend/employees/views_front.py b/backend/employees/views_front.py index 9aa9235c..535c80d8 100644 --- a/backend/employees/views_front.py +++ b/backend/employees/views_front.py @@ -436,13 +436,20 @@ def employee_edit(request, pk: int): Редактирование пользователя по id. Поддерживает как JSON, так и multipart/form-data (для загрузки файлов). """ + import logging + logger = logging.getLogger(__name__) + api = get_api_client(request) # Проверяем Content-Type content_type = request.content_type or '' + logger.info(f"[employee_edit] pk={pk}, Content-Type: {content_type}") + logger.info(f"[employee_edit] request.POST keys: {list(request.POST.keys())}") + logger.info(f"[employee_edit] request.FILES keys: {list(request.FILES.keys())}") if 'multipart/form-data' in content_type: # Обрабатываем multipart/form-data (файлы) + logger.info("[employee_edit] Processing multipart/form-data") payload = {} # Собираем обычные поля из POST @@ -455,18 +462,31 @@ def employee_edit(request, pk: int): else: payload[key] = value + logger.info(f"[employee_edit] Payload before avatar: {list(payload.keys())}") + # Обрабатываем файлы (аватар) if 'avatar' in request.FILES: + avatar_file = request.FILES['avatar'] + logger.info(f"[employee_edit] Processing avatar: {avatar_file.name}, size: {avatar_file.size}") # Конвертируем в data URI для Base64ImageField - payload['avatar'] = _file_to_data_uri(request.FILES['avatar']) + data_uri = _file_to_data_uri(avatar_file) + payload['avatar'] = data_uri + logger.info(f"[employee_edit] Avatar converted, data URI length: {len(data_uri)}") + else: + logger.warning("[employee_edit] No avatar in request.FILES") + + logger.info(f"[employee_edit] Final payload keys: {list(payload.keys())}") # Отправляем в DRF как JSON (с base64 аватаром) resp = api.patch(f"v1/employees/{pk}/", json=payload) + logger.info(f"[employee_edit] API response status: {resp.status}") else: # Обрабатываем JSON (как раньше) + logger.info("[employee_edit] Processing JSON") try: payload = json.loads(request.body or b"{}") - except Exception: + except Exception as e: + logger.error(f"[employee_edit] JSON parse error: {e}") payload = {} resp = api.patch(f"v1/employees/{pk}/", json=payload) @@ -485,13 +505,20 @@ def employee_edit_me(request): Редактирование собственного профиля через /api/v1/employees/me/ Поддерживает как JSON, так и multipart/form-data (для загрузки файлов). """ + import logging + logger = logging.getLogger(__name__) + api = get_api_client(request) # Проверяем Content-Type content_type = request.content_type or '' + logger.info(f"[employee_edit_me] Content-Type: {content_type}") + logger.info(f"[employee_edit_me] request.POST keys: {list(request.POST.keys())}") + logger.info(f"[employee_edit_me] request.FILES keys: {list(request.FILES.keys())}") if 'multipart/form-data' in content_type: # Обрабатываем multipart/form-data (файлы) + logger.info("[employee_edit_me] Processing multipart/form-data") payload = {} # Собираем обычные поля из POST @@ -504,18 +531,31 @@ def employee_edit_me(request): else: payload[key] = value + logger.info(f"[employee_edit_me] Payload before avatar: {list(payload.keys())}") + # Обрабатываем файлы (аватар) if 'avatar' in request.FILES: + avatar_file = request.FILES['avatar'] + logger.info(f"[employee_edit_me] Processing avatar: {avatar_file.name}, size: {avatar_file.size}, content_type: {avatar_file.content_type}") # Конвертируем в data URI для Base64ImageField - payload['avatar'] = _file_to_data_uri(request.FILES['avatar']) + data_uri = _file_to_data_uri(avatar_file) + payload['avatar'] = data_uri + logger.info(f"[employee_edit_me] Avatar converted to data URI, length: {len(data_uri)}") + else: + logger.warning("[employee_edit_me] No avatar in request.FILES") + + logger.info(f"[employee_edit_me] Final payload keys: {list(payload.keys())}") # Отправляем в DRF как JSON (с base64 аватаром) resp = api.patch("v1/employees/me/", json=payload) + logger.info(f"[employee_edit_me] API response status: {resp.status}") else: # Обрабатываем JSON (как раньше) + logger.info("[employee_edit_me] Processing JSON") try: payload = json.loads(request.body or b"{}") - except Exception: + except Exception as e: + logger.error(f"[employee_edit_me] JSON parse error: {e}") payload = {} resp = api.patch("v1/employees/me/", json=payload)