Есть ли способ отобразить сессии пользователя в django и передать их в API?

Я создаю api для аутентификации и ищу способ

  1. Query a database to the current user's logged in sessions
  2. Serialize them
  3. Exposes the to an API endpoint

Вот что у меня получилось: Мой models.py

from django.db import models

from django.contrib.auth.signals import user_logged_in
from django.contrib.sessions.models import Session
from django.contrib.auth.models import User
import datetime
from django.utils import timezone



class UserSession(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    session = models.ForeignKey(Session,on_delete=models.CASCADE)

   
    def all_unexpired_sessions_for_user(user):
        user_sessions = []
        all_sessions  = Session.objects.filter(expire_date__gte=datetime.datetime.now(tz=timezone.utc))
        for session in all_sessions:
            print(session)
            
            try:
                session_data = session.get_decoded()
            except:
                pass
            print(session_data)
            #print(session_data['_auth_user_id'])
            print(type(user))
            print(session_data.get('_auth_user_id'))
            if user.pk == session_data.get('_auth_user_id',''):
                try:
                    user_sessions.append(session.pk)
                except:
                    pass
                
        return Session.objects.filter(pk__in=user_sessions)
    

Я могу отобразить ключи сессии и данные сессии (пожалуйста, не обращайте внимания на мои миллионы операторов печати)

My Serializers.py

from rest_framework import fields, serializers
from .models import UserSession


class UserSessionSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserSession
        fields = ('user',)
      


Мой views.py

from django.shortcuts import render

from rest_framework.views import APIView
from rest_framework.response import Response
from .models import UserSession 

from django.contrib.sessions.models import Session
from .serializers import UserSessionSerializer

class AuthView(APIView):
    pass

class SessionList(APIView):
    def get(self, request,format=None):
        user = request.user
        print(type(user))
        all_sessions = UserSession.all_unexpired_sessions_for_user(user=user)
        print(all_sessions)
        serializers = UserSessionSerializer(all_sessions,many=True)
        return Response(serializers.data)

def home_page(request):
    user = request.user
    #user_sessions = UserSession.objects.get_or_create(user=request.user,session_id =request.session.session_key)
    usr_ssn = UserSession.all_unexpired_sessions_for_user(user=user)
    #print(usr_ssn)
    
    s = Session.objects.get(pk=request.session.session_key)
    print(s.get_decoded())
    
    
    return render(request, "index.html",{'user':user})

**Моя конечная цель - иметь конечную точку завершения, которая позволяет завершать определенные сессии **

Вернуться на верх