def create(self, request): """ Create a session with credentials """ serializer = AuthenticationSerializer(data=request.data) if not serializer.is_valid(): if 'non_field_errors' in serializer.errors: raise AuthenticationFailed('Invalid credentials') raise ValidationError(serializer.errors) # Credentials are valid, let's login the user login(request, serializer.validated_data['user']) serialized_session = SessionSerializer(self.session) return Response(serialized_session.data)
def sessions_by_film(request, id): try: film = Film.objects.get(id=id) except Film.DoesNotExist as e: return Response({'error': str(e)}) if request.method == 'GET': serializer = SessionSerializer(film.sessions.all(), many=True) return Response(serializer.data) elif request.method == 'POST': serializer = SessionSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response({'error': serializer.errors}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def retrieve(self, request: Request): try: user_id = int(request.query_params.get('user_id')) session = Session.find_by_user(user_id) page_size = request.query_params.get('page_size') page_size = int(page_size) if page_size else None if session is None: ip_address, _is_routable = get_client_ip(request) location = geocoder.ip(ip_address) if not location.lat: location = geocoder.ip('me') print('create a session for {}, ip: {}'.format( location.city, ip_address)) serializer = SessionSerializer( data={ 'user_id': user_id, 'page_size': page_size, 'location': location.latlng } ) if not serializer.is_valid(): raise APIException(str(serializer.errors), code=status.HTTP_400_BAD_REQUEST) serializer.save() return Response( serializer.data, status=status.HTTP_201_CREATED) else: if page_size: session.page_size = page_size serializer = SessionSerializer(instance=session) session.save() return Response(serializer.data, status=status.HTTP_200_OK) except Exception as error: print(error) raise APIException(error) finally: sys.stdout.flush()
def delete(self, request): """ Logout user """ logout(request) serialized_session = SessionSerializer(self.session) return Response(serialized_session.data)
def list(self, request): """ Render session """ serialized_session = SessionSerializer(self.session) return Response(serialized_session.data)
def session_member(request): if request.method == 'GET': try: token = request.GET.get('token', None) if not token: raise ValueError('No Token Parameter') user = None auth_user = Token.objects.get(key=token) user = User.objects.get(email=auth_user.user) if user.is_authenticated and token == str( Token.objects.get(user=user)): profile = Profile.objects.get(user=user) print('profile ID: ', profile.id) result = { 'email': user.email, 'id': profile.id, 'username': profile.username, 'token': token, 'gender': profile.gender, 'age': profile.age, 'occupation': profile.occupation, 'is_auth': True, 'is_staff': profile.user.is_staff, 'movie_taste': profile.movie_taste } else: result = { 'email': None, 'id': None, 'username': None, 'token': None, 'gender': None, 'age': None, 'occupation': None, 'is_auth': False, 'is_staff': False, 'movie_taste': None } serializer = SessionSerializer(result) return JsonResponse({ 'result': serializer.data, 'status': status.HTTP_200_OK }) except ValueError: return JsonResponse({ 'status': status.HTTP_400_BAD_REQUEST, 'msg': str(ValueError) }) except User.DoesNotExist: return JsonResponse({ 'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'msg': 'User does not Exists' }) except Exception: return JsonResponse({ 'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'msg': 'UNKNOWN ERROR' })
def updateUser(request): if request.method == 'POST': params = request.data.get('params', None) token = params.get('token', None) email = params.get('email', None) username = params.get('username', None) password = params.get('password', None) occupation = params.get('occupation', None) genres = params.get('genres', None) if token is None or email is None or username is None or password is None or occupation is None or genres is None: return JsonResponse({'status': status.HTTP_400_BAD_REQUEST}) try: user = User.objects.get(email=email) del request.session[str(token)] user.auth_token.delete() auth.logout(request) user = User.objects.get(email=email) profile = Profile.objects.get(user=user) user.set_password(password) user.save() movie_taste_ = [] for genre in genres: movie_taste_.append(genre) profile.username = username profile.occupation = occupation profile.movie_taste = movie_taste_ profile.save() user = auth.authenticate(email=email, password=password) auth.login(request, user) token = Token.objects.create(user=user) request.session[str(token)] = email request.session.modified = True result = { 'email': email, 'id': profile.id, 'username': profile.username, 'gender': profile.gender, 'age': profile.age, 'occupation': profile.occupation, 'token': token, 'is_staff': profile.user.is_staff, 'is_auth': True, 'movie_taste': profile.movie_taste } serializer = SessionSerializer(result) return JsonResponse({ 'status': status.HTTP_200_OK, 'result': serializer.data }) except KeyError as e: return JsonResponse({ 'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'msg': f'Keyerror {e}' }) except User.DoesNotExist as e: return JsonResponse({ 'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'msg': f'DoesNotExists {e}' }) return JsonResponse({ 'status': status.HTTP_400_BAD_REQUEST, 'msg': 'Invalid Request Method' })
def login(request): if request.method == 'POST': email = request.data.get('email', None) password = request.data.get('password', None) # 밑에 3줄은 딱히 필요없을 것 같다. if email is None or password is None: return JsonResponse({ 'msg': "Not input ID and Password", 'status': status.HTTP_400_BAD_REQUEST }) if email is None: return JsonResponse({ 'msg': "Not input Email", 'status': status.HTTP_400_BAD_REQUEST }) if password is None: return JsonResponse({ 'msg': "Not input Password", 'status': status.HTTP_400_BAD_REQUEST }) user = auth.authenticate(email=email, password=password) if user: auth.login(request, user) # 토큰이 서버에서 아직 지워지지 않았거나, auth_token이 그대로 남아있으면 삭제한다 if Token.objects.filter(user=user).first(): if str(Token.objects.get(user=user)) in request.session.keys(): del request.session[str(Token.objects.get(user=user))] user.auth_token.delete() token = Token.objects.create(user=user) request.session[str(token)] = email request.session.modified = True profile = Profile.objects.get(user=user) result = { 'email': email, 'id': profile.id, 'username': profile.username, 'gender': profile.gender, 'age': profile.age, 'occupation': profile.occupation, 'token': token, 'is_staff': profile.user.is_staff, 'is_auth': True, 'movie_taste': profile.movie_taste } else: result = { 'email': None, 'id': None, 'username': None, 'gender': None, 'age': None, 'occupation': None, 'token': None, 'is_staff': False, 'is_auth': False, 'movie_taste': None } serializer = SessionSerializer(result) return JsonResponse( { 'status': status.HTTP_200_OK, 'result': serializer.data }, safe=False) return JsonResponse({ 'status': status.HTTP_400_BAD_REQUEST, 'msg': 'Invalid Request Method' })
def login(request): if request.method == 'POST': print("enter login function!!") username = request.data.get('username', None) password = request.data.get('password', None) print("username : "******" password : "******"user is true") auth.login(request, user) token = Token.objects.filter(user=user) if token: # 토큰 True print("token is true") if str(token[0]) in request.session: del request.session[str(token[0])] user.auth_token.delete() newToken = Token.objects.create(user=user) request.session[str(newToken)] = username profile = Profile.objects.get(user=user) print("favorite : " + profile.favorite) print(profile.when) result = { 'username': username, 'name': profile.name, 'favorite': profile.favorite, 'when': profile.when, 'latestView': profile.latestView, 'token': newToken, 'is_staff': profile.user.is_staff, 'is_authenticated': True } else: token = Token.objects.create(user=user) # 토큰 생성 request.session[str( token)] = username # 토큰에 해당하는 user명을 세션에 저장 profile = Profile.objects.get(user=user) print("favorite : " + profile.favorite) result = { 'username': username, 'name': profile.name, 'favorite': profile.favorite, 'when': profile.when, 'latestView': profile.latestView, 'token': token, 'is_staff': profile.user.is_staff, 'is_authenticated': True } else: print("user is false") result = { 'username': None, 'name': None, 'favorite': None, 'when': None, 'latestView': None, 'token': None, 'is_staff': False, 'is_authenticated': False } serializer = SessionSerializer(result) return Response(data=serializer.data, status=status.HTTP_200_OK)
def session(request): if request.method == "POST": print("enter in session function") token = request.data.get('token', None) username = request.session.get(str(token), None) if username == None: result = { 'username': None, 'name': None, 'favorite': None, 'when': None, 'latestView': None, 'token': None, 'is_authenticated': False, 'is_staff': False, 'pick_policies': None } else: user = User.objects.get(username=username) if user.is_authenticated and token == str( Token.objects.get(user=user)): result = { 'username': username, 'name': Profile.objects.get(user=user).name, 'favorite': Profile.objects.get(user=user).favorite, 'when': Profile.objects.get(user=user).when, 'latestView': Profile.objects.get(user=user).latestView, 'token': token, 'is_authenticated': True, 'is_staff': Profile.objects.get(user=user).user.is_staff, 'pick_policies': Profile.objects.get(user=user).user.pick_policies.all() } else: result = { 'username': None, 'name': None, 'favorite': None, 'when': None, 'latestView': None, 'token': None, 'is_authenticated': False, 'is_staff': False, 'pick_policies': False } serializer = SessionSerializer(result) return Response(data=serializer.data, status=status.HTTP_200_OK) elif request.method == "PUT": print('session put') token = request.data.get('token', None) username = request.session.get(str(token), None) user = User.objects.get(username=username) if user.is_authenticated and token == str( Token.objects.get(user=user)): result = { 'username': username, 'name': Profile.objects.get(user=user).name, 'favorite': Profile.objects.get(user=user).favorite, 'when': Profile.objects.get(user=user).when, 'latestView': Profile.objects.get(user=user).latestView, 'token': token, 'is_authenticated': True, 'is_staff': Profile.objects.get(user=user).user.is_staff, 'pick_policies': Profile.objects.get(user=user).user.pick_policies.all() } serializer = SessionSerializer(result) return Response(data=serializer.data, status=status.HTTP_200_OK)