Как получить текущего зарегистрированного пользователя в файле signals.py?

Я создаю приложение todo app и одной из его функций является отправка электронного письма пользователю о том, что его задача просрочена.

Часть файла views.py:

from .models import Todo
from django.utils import timezone
from .signals import overdue

def index(request):
    ...
    overdue_tasks = Todo.objects.filter(time__lte=timezone.now())
    if overdue_tasks:
        overdue.send_robust(sender=Todo)
    ...
    return render(request, 'todo/index.html', {'overdue_tasks' : overdue_tasks })

Часть файла signals.py:

from django.dispatch import receiver, Signal
from .models import Todo
from django.core.mail import send_mail

overdue = Signal()
user_email = request.user.email

@receiver(overdue)
def my_handler(sender, **kwargs):
    send_mail('My Task Manager', 'Your task was Overdue !', 'abdullahatif132@gmail.com', 'user_email', fail_silently=False)'

Вызывает исключение:

"NameError: name 'request is not defined."

Вы пытаетесь получить доступ к запросу через request.user.email без запроса на доступ, вы можете получить доступ к электронной почте пользователя в представлении index, передать электронную почту в качестве **kwarg и получить доступ в my_handler

def index(request):
    ...
    overdue_tasks = Todo.objects.filter(time__lte=timezone.now())
    if overdue_tasks:
        overdue.send_robust(sender=Todo, email=request.user.email)
    ...
    return render(request, 'todo/index.html', {'overdue_tasks' : overdue_tasks })

@receiver(overdue)
def my_handler(sender, **kwargs):
    email = kwargs.get('email')
    send_mail(foo)
Вернуться на верх