Обновление: Этот метод устарел с Django 1.3, см. Ответ Томми ниже об использовании сигналов.
Я тоже искал ответ на это и в итоге пошел другим путем. Вы можете использовать свои собственные представления для входа в систему и выхода из нее, которые выполняют какое-то действие и затем вызывают представления представления. Для входа в систему:
def login(request, *args, **kwargs):
from django.contrib.auth.forms import AuthenticationForm
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
# login successful
do_something()
from django.contrib.auth.views import login as authlogin
return authlogin(request, *args, **kwargs)
И для выхода:
def logout(request, *args, **kwargs):
do_something()
from django.contrib.auth.views import logout as authlogout
return authlogout(request, *args, **kwargs)
Вместо заполнителей do_something вы можете выполнять любую обработку в соответствии с вашими предпочтениями, например, отправлять сигналы, регистрировать время входа и выхода из системы и т. Д.
Наконец, не забудьте обновить urls.py
, чтобы он указывал на ваши собственные представления.
Я не уверен, как пользовательский бэкэнд аутентификации может обрабатывать события выхода из системы, так как в конце концов я отказался от этого и попробовал это вместо этого. Кроме того, этот подход имеет преимущество, заключающееся в предоставлении объекта request
вместо просто пользователя.