django .contrib.sessions.models.Session.DoesNotExist: запрос на сопоставление сеанса не существует - PullRequest
0 голосов
/ 06 февраля 2020

это мои модели. Я должен использовать сеанс, чтобы я мог получить идентификатор сеанса пользователя

from django.conf import settings
from django.db import models
from django.contrib.sessions.models import Session
# Create your models here.

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

    def __str__(self):
        return self.user.username

моего файла authentication.py, чтобы я мог позволить только одному пользователю одновременно войти в систему. Я получил ошибку в строке сессия = Session.objects.get (рк = request.session.session_key).

from django.contrib.auth.backends import ModelBackend
from .models import UserSession
from django.contrib.sessions.models import Session

from django.contrib.auth.backends import ModelBackend

class MyBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        if Session.objects.filter(usersession__user__username=username).exists():
            return None
        else:
            user = super().authenticate(request,username=username,password=password,**kwargs)    
        if user:
            UserSession.objects.get_or_create(
                user=user,
                session=Session.objects.get(pk=request.session.session_key)

            )
        return user 

Это мои настройки. Lab - это имя приложения, а authentication.py - это файл, в который я включил код фильтра.

AUTHENTICATION_BACKENDS = ['lab.authentication.MyBackend']
...