# coding=utf-8 """ @project: MaxKB @Author:虎虎 @file: user.py @date:2025/4/14 10:22 @desc: """ from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import extend_schema from rest_framework.request import Request from rest_framework.views import APIView from common import result from common.log.log import log from common.utils.common import encryption from users.api.login import LoginAPI, CaptchaAPI from users.serializers.login import LoginSerializer, CaptchaSerializer def _get_details(request): path = request.path body = request.data query = request.query_params return { 'path':path, 'body':{**body, 'password': encryption(body.get('password',''))}, 'query': query } class LoginView(APIView): @extend_schema(methods=['POST'], description=_("Log in"), summary=_("Log in"), operation_id=_("Log in"), # type: ignore tags=[_("User Management")], # type: ignore request=LoginAPI.get_request(), responses=LoginAPI.get_response()) @log(menu='User management', operate='Log in', get_user=lambda r: {'username': r.data.get('username', None)}, get_details=_get_details, get_operation_object=lambda r,k: {'name': r.data.get('username')}) def post(self, request: Request): return result.success(LoginSerializer().login(request.data)) class CaptchaView(APIView): @extend_schema(methods=['GET'], summary=_("Get captcha"), description=_("Get captcha"), operation_id=_("Get captcha"), # type: ignore tags=[_("User Management")], # type: ignore responses=CaptchaAPI.get_response()) def get(self, request: Request): return result.success(CaptchaSerializer().generate())