я решаю проблему с новой моделью, пользовательским декоратором и пользовательской страницей входа
1) я создал дополнительную модель для пользователей, например:
class SessionKey(models.Model):
user = models.OneToOneField(User,primary_key=True)
key = models.CharField(max_length=255)
2) я создал пользовательскуюДекоратор для проверки сеансового ключа равен или не последний ключ.я изменил исходный исходный код декораторы Django
from functools import wraps
from django.conf import settings
from django.utils.decorators import available_attrs
from django.contrib.auth.decorators import login_required
from django.shortcuts import resolve_url
from users.models import SessionKey #my additional model
def unique_login_required(view_func):
@wraps(view_func, assigned=available_attrs(view_func))
def _wrapped_view(request, *args, **kwargs):
r = False
...
#check session key is equal to last one
...
if r:
return view_func(request, *args, **kwargs)
else:
from django.contrib.auth.views import redirect_to_login
path = request.build_absolute_uri()
resolved_login_url = resolve_url(settings.LOGIN_URL)
return redirect_to_login(path,resolved_login_url)
return _wrapped_view
3) на пользовательской странице входа, я обновил ключ сеанса.при последнем входе в систему всегда обновляется сохраненный сеансовый ключ.
наконец, в представлениях я вызываю моего декоратора
from users.decorators import unique_login_required
@unique_login_required
def index(request):
...