python - 如何在signals.py文件中获取当前登录的用户?
问题描述
我正在制作一个待办事项应用程序,其中一个功能是向用户发送一封电子邮件,说明他的任务已过期。
部分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 })
部分信号.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('Subject', 'Your task was Overdue !', 'myemail@gmail.com', 'user_email', fail_silently=False)'
它引发了异常:
“NameError:名称'请求未定义。”
解决方案
您正在尝试在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)
推荐阅读
- python - 如何在没有 PermissionError 的情况下向 selenium 添加 chrome 扩展:[Errno 13] Permission denied?
- php - sqlDataPovider 到 activeDataProvider Yii2
- angular - 在堆积图中选择一系列列并检索相关数据
- swift - 从开放天气 api SwiftUI 获取错误
- reactjs - 后端中的 Microsoft 身份验证和访问令牌验证?
- yolo - Yolo 学习率没有意义?
- google-cloud-firestore - 谷歌云存储缓存js文件
- java - 并行执行测试的周期性问题
- google-cloud-platform - Solaris (SPARC) 到谷歌计算引擎
- python - 有没有办法停止/杀死python中的线程?