Есть ли способ отобразить сессии пользователя в django и передать их в API?
Я создаю api для аутентификации и ищу способ
- Query a database to the current user's logged in sessions
- Serialize them
- 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})
**Моя конечная цель - иметь конечную точку завершения, которая позволяет завершать определенные сессии **