from django.http.response import JsonResponse from django.views.decorators.csrf import ensure_csrf_cookie, csrf_protect from django.utils.decorators import method_decorator from rest_framework.parsers import JSONParser from rest_framework.views import APIView from django.core.cache import cache from django.core.exceptions import ObjectDoesNotExist from .models import Teacher, Speciality, SchoolClass, Planning from .serializers import TeacherSerializer, SpecialitySerializer, SchoolClassSerializer, PlanningSerializer from N3wtSchool import bdd @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class SpecialitiesView(APIView): def get(self, request): specialitiesList=bdd.getAllObjects(Speciality) specialities_serializer=SpecialitySerializer(specialitiesList, many=True) return JsonResponse(specialities_serializer.data, safe=False) def post(self, request): specialities_data=JSONParser().parse(request) all_valid = True for speciality_data in specialities_data: speciality_serializer = SpecialitySerializer(data=speciality_data) if speciality_serializer.is_valid(): speciality_serializer.save() else: all_valid = False break if all_valid: specialitiesList = bdd.getAllObjects(Speciality) specialities_serializer = SpecialitySerializer(specialitiesList, many=True) return JsonResponse(specialities_serializer.data, safe=False) return JsonResponse(speciality_serializer.errors, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class SpecialityView(APIView): def get (self, request, _id): speciality = bdd.getObject(_objectName=Speciality, _columnName='id', _value=_id) speciality_serializer=SpecialitySerializer(speciality) return JsonResponse(speciality_serializer.data, safe=False) def post(self, request): speciality_data=JSONParser().parse(request) speciality_serializer = SpecialitySerializer(data=speciality_data) if speciality_serializer.is_valid(): speciality_serializer.save() return JsonResponse(speciality_serializer.data, safe=False) return JsonResponse(speciality_serializer.errors, safe=False) def put(self, request, _id): speciality_data=JSONParser().parse(request) speciality = bdd.getObject(_objectName=Speciality, _columnName='id', _value=_id) speciality_serializer = SpecialitySerializer(speciality, data=speciality_data) if speciality_serializer.is_valid(): speciality_serializer.save() return JsonResponse(speciality_serializer.data, safe=False) return JsonResponse(speciality_serializer.errors, safe=False) def delete(self, request, _id): return bdd.delete_object(Speciality, _id) class TeachersView(APIView): def get(self, request): teachersList=bdd.getAllObjects(Teacher) teachers_serializer=TeacherSerializer(teachersList, many=True) return JsonResponse(teachers_serializer.data, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class TeacherView(APIView): def get (self, request, _id): teacher = bdd.getObject(_objectName=Teacher, _columnName='id', _value=_id) teacher_serializer=TeacherSerializer(teacher) return JsonResponse(teacher_serializer.data, safe=False) def post(self, request): teacher_data=JSONParser().parse(request) teacher_serializer = TeacherSerializer(data=teacher_data) if teacher_serializer.is_valid(): teacher_serializer.save() return JsonResponse(teacher_serializer.data, safe=False) return JsonResponse(teacher_serializer.errors, safe=False) def put(self, request, _id): teacher_data=JSONParser().parse(request) teacher = bdd.getObject(_objectName=Teacher, _columnName='id', _value=_id) teacher_serializer = TeacherSerializer(teacher, data=teacher_data) if teacher_serializer.is_valid(): teacher_serializer.save() return JsonResponse(teacher_serializer.data, safe=False) return JsonResponse(teacher_serializer.errors, safe=False) def delete(self, request, _id): return bdd.delete_object(Teacher, _id, related_field='associated_profile') @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class ClassesView(APIView): def get(self, request): classesList=bdd.getAllObjects(SchoolClass) classes_serializer=SchoolClassSerializer(classesList, many=True) return JsonResponse(classes_serializer.data, safe=False) def post(self, request): all_valid = True classes_data=JSONParser().parse(request) for classe_data in classes_data: classe_serializer = SchoolClassSerializer(data=classe_data) if classe_serializer.is_valid(): classe_serializer.save() else: all_valid = False break if all_valid: classesList = bdd.getAllObjects(SchoolClass) classes_serializer = SchoolClassSerializer(classesList, many=True) return JsonResponse(classes_serializer.data, safe=False) return JsonResponse(classe_serializer.errors, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class ClasseView(APIView): def get (self, request, _id): schoolClass = bdd.getObject(_objectName=SchoolClass, _columnName='id', _value=_id) classe_serializer=SchoolClassSerializer(schoolClass) return JsonResponse(classe_serializer.data, safe=False) def post(self, request): classe_data=JSONParser().parse(request) classe_serializer = SchoolClassSerializer(data=classe_data) if classe_serializer.is_valid(): classe_serializer.save() return JsonResponse(classe_serializer.data, safe=False) return JsonResponse(classe_serializer.errors, safe=False) def put(self, request, _id): classe_data=JSONParser().parse(request) schoolClass = bdd.getObject(_objectName=SchoolClass, _columnName='id', _value=_id) classe_serializer = SchoolClassSerializer(schoolClass, data=classe_data) if classe_serializer.is_valid(): classe_serializer.save() return JsonResponse(classe_serializer.data, safe=False) return JsonResponse(classe_serializer.errors, safe=False) def delete(self, request, _id): return bdd.delete_object(SchoolClass, _id) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class PlanningsView(APIView): def get(self, request): schedulesList=bdd.getAllObjects(Planning) schedules_serializer=PlanningSerializer(schedulesList, many=True) return JsonResponse(schedules_serializer.data, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class PlanningView(APIView): def get (self, request, _id): planning = bdd.getObject(_objectName=Planning, _columnName='classe__id', _value=_id) planning_serializer=PlanningSerializer(planning) return JsonResponse(planning_serializer.data, safe=False) def post(self, request): planning_data=JSONParser().parse(request) planning_serializer = PlanningSerializer(data=planning_data) if planning_serializer.is_valid(): planning_serializer.save() return JsonResponse(planning_serializer.data, safe=False) return JsonResponse(planning_serializer.errors, safe=False) def put(self, request, _id): planning_data = JSONParser().parse(request) try: planning = Planning.objects.get(id=_id) except Planning.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=404) except Planning.MultipleObjectsReturned: return JsonResponse({'error': 'Multiple objects found'}, status=400) planning_serializer = PlanningSerializer(planning, data=planning_data) if planning_serializer.is_valid(): planning_serializer.save() return JsonResponse(planning_serializer.data, safe=False) return JsonResponse(planning_serializer.errors, safe=False)