def create(self, request, *args, **kwargs): room_id = request.data['room'] password = request.data['password'] room = Room.objects.filter(id=room_id).first() user = self.request.user if (user.username == room.owner.username): return Response( {"non_field_errors": ['You can not join a room you own.']}, status=status.HTTP_400_BAD_REQUEST) if not room or not room.check_password(password): return Response( { "non_field_errors": ['Unable to join room with provided credentials.'] }, status=status.HTTP_400_BAD_REQUEST) serializer = self.serializer_class(data={ 'room': room.id, 'user': user.id }) if serializer.is_valid(): serializer.save() room_serializer = RoomSerializer(room) return Response(room_serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def favs(self, request, pk): user = self.get_object() serializer = RoomSerializer(user.favs.all(), many=True, context={ "request": request }).data return Response(serializer)
def toggle_favs(self, request, pk): user = self.get_object() serializer = RoomSerializer(user) id = request.data.get("id", None) if id is not None: try: room = Room.objects.get(pk=id) if room in user.favs.all(): user.favs.remove(room) else: user.favs.add(room) return Response( data=RoomSerializer(user.favs.all(), many=True).data) except Room.DoesNotExist: return Response(status=status.HTTP_400_BAD_REQUEST) else: return Response(status=status.HTTP_400_BAD_REQUEST)
class EventSerializer(serializers.ModelSerializer): group = GroupSerializer(many=True) starting_time = serializers.DateTimeField(source='timeslot.starting_time') ending_time = serializers.DateTimeField(source='timeslot.ending_time') class_info = ClassEventSerializer(source='current_class') room = RoomSerializer() class Meta: model = Event fields = ("id", "class_info", "room", "group", "starting_time", "ending_time", "date")
def toggle_favs(self, request, pk): room_pk = request.data.get("pk", None) if room_pk is None: return Response(status=status.HTTP_400_BAD_REQUEST) try: room = Room.objects.get(pk=room_pk) if request.user.favs.filter(pk=room_pk).exists(): request.user.favs.remove(room) else: request.user.favs.add(room) return Response(RoomSerializer(room).data) except Room.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND)
def toggle_favs(self, request, pk): pk = request.data.get("pk", None) user = self.get_object() if pk is not None: try: room = Room.objects.get(pk=pk) if room in user.favs.all(): user.favs.remove(room) else: user.favs.add(room) serializer = RoomSerializer(user.favs.all(), many=True) return Response(serializer.data) except Room.DoesNotExist: pass return Response(status=status.HTTP_400_BAD_REQUEST)
def put(self, request): uuid = request.data.get("uuid", None) user = request.user if uuid is not None: try: room = Room.objects.get(uuid=uuid) if room in user.favs.all(): user.favs.remove(room) else: user.favs.add(room) serializer = RoomSerializer(user.favs.all(), many=True).data return Response(data=serializer, status=status.HTTP_200_OK) except Room.DoesNotExist: pass return Response(status=status.HTTP_400_BAD_REQUEST)
def put(self, request): pk = request.data.get("pk", None) user = request.user if pk is not None: try: room = Room.objects.get(pk=pk) if room in user.favs.all(): user.favs.remove(room) else: user.favs.add(room) serializer = RoomSerializer(user.favs.all(), many=True).data return Response(serializer) except Room.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) else: return Response(status=status.HTTP_400_BAD_REQUEST)
def room_list(request): """ List all code rooms, or create a new room. """ if request.method == 'GET': rooms = Room.objects.all() serializer = RoomSerializer(rooms, many=True) return Response(serializer.data) elif request.method == 'POST': data = JSONParser().parse(request) serializer = RoomSerializer(data=data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def room_detail(request, pk): """ Retrieve, update or delete a code room. """ try: room = Room.objects.get(pk=pk) except Room.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': serializer = RoomSerializer(room) return Response(serializer.data) elif request.method == 'PUT': data = JSONParser().parse(request) serializer = RoomSerializer(room, data=data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': room.delete() return Response(status=status.HTTP_204_NO_CONTENT)
def get(self, request): user = request.user serializer = RoomSerializer(user.favs.all(), many=True).data return Response(serializer)
def get(self, request): user = request.user serializer = RoomSerializer(user.favs.all(), many=True).data return Response(data=serializer, status=status.HTTP_200_OK)
def rooms(self, request, uuid): user = self.get_object() serializer = RoomSerializer( user.rooms.all(), many=True, context={"request": request} ).data return Response(data=serializer, status=status.HTTP_200_OK)
def retrieve(self, request, pk=None): queryset = Room.objects.all() room = get_object_or_404(queryset, pk=pk) serializer = RoomSerializer(room) return Response(serializer.data)
def favs(self, request, pk): # user 정보를 viewset안에 내장되어 있는 get_object 함수로 가져온다 user = self.get_object() # user의 favs의 전부를 가져온다 serializer = RoomSerializer(user.favs.all(), many=True).data return Response(serializer)
def favs(self, request, pk): # detail=True일때 pk 받아줘야 함! # user = request.user user = self.get_object() # 로그아웃 상태에서도 favs 볼 수 있게 serializer = RoomSerializer(user.favs.all(), many=True).data return Response(serializer)
def favs(self, request, pk): user = self.get_object() # self.get_object() : # pk 값으로 해당하는 query 를 찾고 다음 # permission 에 해당하는 action 을 찾고 그 행동을취해줌 serializer = RoomSerializer(user.favs.all(), many=True) return Response(serializer.data)
def destroy(self, request, *args, **kwargs): instance = self.get_object() data = RoomSerializer(instance).data instance.delete() return Response(data, status=status.HTTP_204_NO_CONTENT)
def create(self, request, *args, **kwargs): serializer = RoomSerializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) return Response(serializer.data, status=status.HTTP_201_CREATED)
def favs(self, request, pk): user = self.get_object() serializer = RoomSerializer(user.favs.all(), many=True) return Response(data=serializer.data)
def favs(self, request, pk): user = self.get_object() serializer = RoomSerializer(user.favs.all(), many=True, context={"request": request}) return Response(serializer.data, status=status.HTTP_200_OK)