from django.contrib.auth import get_user_model from django.contrib import auth from rest_framework.views import APIView from rest_framework.renderers import JSONRenderer from rest_framework.response import Response from access.serializers import UserInitSerializer from courses.models import Course class TeacherListView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 def get(self, request): kwargs = dict( in_role='T', is_active=True, reg_status=4, ) res = [] course_id = request.GET.get('course_id', 0) if course_id: kwargs['course_teachers'] = Course.objects.get(id=course_id) for teacher in get_user_model().objects.filter(**kwargs): res.append(teacher.full_name()) return Response(res, self.status_code) class CheckUserView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 def get(self, request): if request.user.is_authenticated() and (request.user.in_role in ['M', 'S', 'S2', 'A'] or request.user.is_admin): return Response(True, status=self.status_code) return Response(False, status=self.status_code) class InfoUserView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 def get(self, request): if request.user.is_authenticated(): return Response(UserInitSerializer(request.user).data, status=self.status_code) return Response('anonymous', status=self.status_code) class RegistrationView(APIView): renderer_classes = (JSONRenderer,) @staticmethod def post(request): try: user = get_user_model().objects.get(email=request.JSON['email'].lower()) except get_user_model().DoesNotExist: user = get_user_model().objects.create_user( email=request.JSON['email'].lower(), ) user.set_password(request.JSON['password']) user.reg_status = '2' user.save() return Response(UserInitSerializer(user).data, status=200) class ChangePasswordView(APIView): renderer_classes = (JSONRenderer,) @staticmethod def post(request): if request.user.is_authenticated and not request.user.check_password(request.JSON['old_password']): return Response("Неверный пароль", status=404) request.user.set_password(request.JSON['new_password']) request.user.save() return Response("Пароль был изменён", status=200) class LoginView(APIView): renderer_classes = (JSONRenderer,) @staticmethod def post(request): if not request.user.is_authenticated(): user = auth.authenticate(email=request.JSON.get('email'), password=request.JSON.get('password')) try: auth.login(request, user) except AttributeError: return Response("Неверный пароль", status=404) return Response(UserInitSerializer(request.user).data, status=200) class LogoutView(APIView): renderer_classes = (JSONRenderer,) @staticmethod def post(request): if request.user.is_authenticated(): auth.logout(request) return Response(status=204)