Add detailed logging for registration debugging
- Added logging in RegisterAPIView to track incoming data and validation errors - Added logging in register_view to track form data and API communication - Created test_register_api.py script for testing registration API - Logs include: POST data, Content-Type, validation errors, API payload and responses - All logs use [REGISTER] and [REGISTER_VIEW] prefixes for easy filtering
This commit is contained in:
parent
08c5c4a895
commit
2637e9ed65
@ -300,12 +300,20 @@ class RegisterAPIView(APIView):
|
||||
|
||||
@transaction.atomic
|
||||
def post(self, request):
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Логируем входящие данные для диагностики
|
||||
logger.warning(f"[REGISTER] Received data: {request.data}")
|
||||
logger.warning(f"[REGISTER] Content-Type: {request.content_type}")
|
||||
|
||||
# 0) хотя бы один контакт
|
||||
if not (
|
||||
request.data.get("telegram")
|
||||
or request.data.get("whatsapp")
|
||||
or request.data.get("wechat")
|
||||
):
|
||||
logger.warning("[REGISTER] No contact provided")
|
||||
return Response(
|
||||
{
|
||||
"detail": "Заполните хотя бы одно из полей: WhatsApp, WeChat или Telegram"
|
||||
@ -314,6 +322,8 @@ class RegisterAPIView(APIView):
|
||||
)
|
||||
|
||||
ser = RegisterSerializer(data=request.data)
|
||||
if not ser.is_valid():
|
||||
logger.warning(f"[REGISTER] Validation errors: {ser.errors}")
|
||||
ser.is_valid(raise_exception=True)
|
||||
v = ser.validated_data
|
||||
|
||||
|
||||
@ -65,6 +65,9 @@ def register_view(request):
|
||||
Страница регистрации: показываем Django-форму и шлём валидные данные в /api/v1/auth/register/
|
||||
(аватар пока локально, в API не отправляем — загрузим после верификации).
|
||||
"""
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
api = get_api_client(request)
|
||||
|
||||
if request.method == "GET":
|
||||
@ -73,11 +76,24 @@ def register_view(request):
|
||||
|
||||
# ВАЖНО: учитывать файлы (чтобы form.avatar был BoundField)
|
||||
form = RegistrationForm(request.POST, request.FILES)
|
||||
|
||||
# Логируем полученные данные
|
||||
logger.warning(f"[REGISTER_VIEW] POST data: {request.POST.dict()}")
|
||||
logger.warning(f"[REGISTER_VIEW] FILES: {list(request.FILES.keys())}")
|
||||
|
||||
if not form.is_valid():
|
||||
logger.warning(f"[REGISTER_VIEW] Form errors: {form.errors}")
|
||||
return render(request, "auth/register.html", {"form": form}, status=400)
|
||||
|
||||
payload = form.to_api_payload() # формирует json для API, включая password
|
||||
logger.warning(f"[REGISTER_VIEW] API payload keys: {list(payload.keys())}")
|
||||
payload_debug = {k: v for k, v in payload.items() if k != 'avatar'}
|
||||
logger.warning(f"[REGISTER_VIEW] API payload (без avatar): {payload_debug}")
|
||||
|
||||
resp = api.post("v1/auth/register/", json=payload)
|
||||
logger.warning(f"[REGISTER_VIEW] API response status: {resp.status}")
|
||||
resp_data = resp.json if resp.json else resp.content
|
||||
logger.warning(f"[REGISTER_VIEW] API response: {resp_data}")
|
||||
|
||||
if resp.status == 201:
|
||||
messages.success(
|
||||
|
||||
148
backend/test_register_api.py
Normal file
148
backend/test_register_api.py
Normal file
@ -0,0 +1,148 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
Тестовый скрипт для проверки API регистрации.
|
||||
Отправляет запросы на /api/v1/auth/register/ и показывает ответы.
|
||||
"""
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
import django
|
||||
|
||||
# Настройка Django
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eusrr_backend.settings")
|
||||
django.setup()
|
||||
|
||||
from django.test import Client
|
||||
from django.urls import reverse
|
||||
|
||||
|
||||
def test_register():
|
||||
"""Тестируем регистрацию с валидными данными."""
|
||||
client = Client()
|
||||
url = reverse("api:v1:register")
|
||||
|
||||
# Тестовые данные
|
||||
payload = {
|
||||
"first_name": "Тест",
|
||||
"last_name": "Тестов",
|
||||
"phone_number": "+79991234567",
|
||||
"email": "test@example.com",
|
||||
"birth_date": "1990-01-01",
|
||||
"password": "password123",
|
||||
"telegram": "@test_user",
|
||||
"whatsapp": "",
|
||||
"wechat": "",
|
||||
}
|
||||
|
||||
print(f"Отправка запроса на: {url}")
|
||||
print(f"Данные: {json.dumps(payload, indent=2, ensure_ascii=False)}")
|
||||
print("-" * 60)
|
||||
|
||||
response = client.post(
|
||||
url,
|
||||
data=json.dumps(payload),
|
||||
content_type="application/json"
|
||||
)
|
||||
|
||||
print(f"Статус: {response.status_code}")
|
||||
print(f"Content-Type: {response.get('Content-Type')}")
|
||||
|
||||
try:
|
||||
data = response.json()
|
||||
print(f"Ответ: {json.dumps(data, indent=2, ensure_ascii=False)}")
|
||||
except Exception as e:
|
||||
print(f"Не удалось распарсить JSON: {e}")
|
||||
print(f"Тело ответа: {response.content.decode('utf-8')}")
|
||||
|
||||
return response
|
||||
|
||||
|
||||
def test_register_missing_contact():
|
||||
"""Тестируем регистрацию без контактов."""
|
||||
client = Client()
|
||||
url = reverse("api:v1:register")
|
||||
|
||||
payload = {
|
||||
"first_name": "Тест",
|
||||
"last_name": "Тестов",
|
||||
"phone_number": "+79991234567",
|
||||
"email": "test2@example.com",
|
||||
"birth_date": "1990-01-01",
|
||||
"password": "password123",
|
||||
"telegram": "",
|
||||
"whatsapp": "",
|
||||
"wechat": "",
|
||||
}
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("Тест без контактов:")
|
||||
print(f"Данные: {json.dumps(payload, indent=2, ensure_ascii=False)}")
|
||||
print("-" * 60)
|
||||
|
||||
response = client.post(
|
||||
url,
|
||||
data=json.dumps(payload),
|
||||
content_type="application/json"
|
||||
)
|
||||
|
||||
print(f"Статус: {response.status_code}")
|
||||
try:
|
||||
data = response.json()
|
||||
print(f"Ответ: {json.dumps(data, indent=2, ensure_ascii=False)}")
|
||||
except Exception as e:
|
||||
print(f"Не удалось распарсить JSON: {e}")
|
||||
|
||||
return response
|
||||
|
||||
|
||||
def test_register_invalid_phone():
|
||||
"""Тестируем регистрацию с неправильным телефоном."""
|
||||
client = Client()
|
||||
url = reverse("api:v1:register")
|
||||
|
||||
payload = {
|
||||
"first_name": "Тест",
|
||||
"last_name": "Тестов",
|
||||
"phone_number": "123", # неправильный формат
|
||||
"email": "test3@example.com",
|
||||
"birth_date": "1990-01-01",
|
||||
"password": "password123",
|
||||
"telegram": "@test_user",
|
||||
"whatsapp": "",
|
||||
"wechat": "",
|
||||
}
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("Тест с неправильным телефоном:")
|
||||
print(f"Данные: {json.dumps(payload, indent=2, ensure_ascii=False)}")
|
||||
print("-" * 60)
|
||||
|
||||
response = client.post(
|
||||
url,
|
||||
data=json.dumps(payload),
|
||||
content_type="application/json"
|
||||
)
|
||||
|
||||
print(f"Статус: {response.status_code}")
|
||||
try:
|
||||
data = response.json()
|
||||
print(f"Ответ: {json.dumps(data, indent=2, ensure_ascii=False)}")
|
||||
except Exception as e:
|
||||
print(f"Не удалось распарсить JSON: {e}")
|
||||
|
||||
return response
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("=" * 60)
|
||||
print("ТЕСТ API РЕГИСТРАЦИИ")
|
||||
print("=" * 60)
|
||||
|
||||
test_register()
|
||||
test_register_missing_contact()
|
||||
test_register_invalid_phone()
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("Тесты завершены")
|
||||
print("=" * 60)
|
||||
Loading…
x
Reference in New Issue
Block a user