refactor(api): создание базового AnonymousAPIView для DRY
ПРОБЛЕМА: - ResendEmailAPIView, VerifyEmailAPIView, RegisterAPIView дублировали: • throttle_scope = "anon" • permission_classes = [AllowAny] - Нарушение DRY принципа (6 строк повторяющегося кода) РЕШЕНИЕ: Создан базовый класс AnonymousAPIView(APIView): - throttle_scope = "anon" - permission_classes = [AllowAny] - Используется для всех публичных auth endpoints ИЗМЕНЕНИЯ: - ResendEmailAPIView(AnonymousAPIView) - удалены дубли - VerifyEmailAPIView(AnonymousAPIView) - удалены дубли - RegisterAPIView(LdapUserCreationMixin, AnonymousAPIView) - удалены дубли РЕЗУЛЬТАТ: - Убрано 8 строк дублирования - Более чистая иерархия наследования - Легче добавлять новые анонимные endpoints - Единая точка для настройки throttling/permissions Django check: успешно
This commit is contained in:
parent
aa70c23f0f
commit
bebe61b727
@ -26,12 +26,18 @@ from .mixins import LdapUserCreationMixin, _is_ldap_enabled
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ResendEmailAPIView(APIView):
|
||||
"""POST /api/v1/auth/resend-email/ body: {"email": "..."}"""
|
||||
|
||||
class AnonymousAPIView(APIView):
|
||||
"""Базовый класс для анонимных (публичных) API endpoints.
|
||||
|
||||
Все auth-related views наследуются от этого класса для DRY.
|
||||
"""
|
||||
throttle_scope = "anon"
|
||||
permission_classes = [AllowAny]
|
||||
|
||||
|
||||
class ResendEmailAPIView(AnonymousAPIView):
|
||||
"""POST /api/v1/auth/resend-email/ body: {"email": "..."}"""
|
||||
|
||||
def post(self, request):
|
||||
ser = EmailSerializer(data=request.data)
|
||||
ser.is_valid(raise_exception=True)
|
||||
@ -55,10 +61,7 @@ class ResendEmailAPIView(APIView):
|
||||
return Response({"ok": True}, status=200)
|
||||
|
||||
|
||||
class VerifyEmailAPIView(APIView):
|
||||
throttle_scope = "anon"
|
||||
permission_classes = [AllowAny]
|
||||
|
||||
class VerifyEmailAPIView(AnonymousAPIView):
|
||||
def post(self, request):
|
||||
"""Подтверждает email и активирует пользователя.
|
||||
|
||||
@ -94,14 +97,11 @@ class VerifyEmailAPIView(APIView):
|
||||
return Response({"ok": True, "user_id": user.id}, status=200)
|
||||
|
||||
|
||||
class RegisterAPIView(LdapUserCreationMixin, APIView):
|
||||
class RegisterAPIView(LdapUserCreationMixin, AnonymousAPIView):
|
||||
"""Регистрация: создаём учётку в LDAP (disabled) с паролем, в БД — set_unusable_password.
|
||||
|
||||
Использует LdapUserCreationMixin для вынесения LDAP-специфичной логики.
|
||||
"""
|
||||
|
||||
throttle_scope = "anon"
|
||||
permission_classes = [AllowAny]
|
||||
parser_classes = (JSONParser, FormParser, MultiPartParser)
|
||||
|
||||
@transaction.atomic
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user