Используйте вашу базу данных как «рефери». Создайте класс, который наследуется от generic.TemplateView
, переопределите метод get
и/или post
и перед вызовом родителя сделайте запрос к базе данных: если страница просматривается, не вызывайте родителя и не возвращайте перенаправление на главную страницу ,
Но вы можете столкнуться с проблемой, если тот, кто просматривает страницу, выключает компьютер: как вы узнаете, что он больше не смотрит? Возможно, вам придется реализовать сторожевой таймер или что-то еще, и даже тогда с Chrome сторожевой таймер будет остановлен, если это не активная вкладка ... если бы я был вами, я бы поискал другой способ справиться с этой проблемой.
«один пользователь, чтобы видеть в то же время» - что вы имеете в виду? – Niyojan
Скажите странице/тесту /, если пользователь A видит эту страницу, тогда никто другой не может видеть эту страницу, запрос будет заблокирован. Только после того, как A закрывает эту страницу, другие могут ее увидеть. – Haoliang
Я не знаю, почему вы хотели бы сделать что-то подобное, но вы можете создать декоратор, который сохраняет флаг (в db) для каждого входа пользователя. Поэтому каждый раз, когда пользователь входит в систему, вы вызываете декоратор для обновления флага active_user и при выходе из системы вы можете его сбросить. Поэтому, если флаг установлен, вы можете перенаправить другие входящие логины на другую страницу (показывая, что сервер занят или что-то еще). надеюсь, это поможет – Niyojan