如何解决Django Signal request_finished 获取用户实例
我试图理解 Django 中的信号。我正在为 DRF 创建项目。
from django.dispatch import receiver
from django.contrib.auth.signals import user_logged_in
from django.core.signals import request_finished
对于这个信号,我可以抓住用户
@receiver(user_logged_in)
def last_user_login(sender,request,user,**kwargs):
print('User **{}** logged in'.format(user))
我想抓住这个信号的用户,但据我所知这是不可能的。
@receiver(request_finished)
def last_user_request(sender,**kwargs):
print('User made request')
我的目标:捕获最后一个用户请求并将此数据写入数据库。
有人可以帮我吗?谢谢。
解决方法
request_finished
信号仅包含有关其发送者类的信息,正如您在其发送的 HttpResponseBase
类中所见:
signals.request_finished.send(sender=self._handler_class)
为了完成您想要的操作,您可以考虑编写一个 custom middleware,您可以在其中访问 request
对象,从而也可以访问 User
。仔细想想,如果你真的想写入那里的数据库,它可能会很慢。
写一个 custom middleware 来实现这个:
middleware.py:
class SimpleMiddleware:
def __init__(self,get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self,request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
print(response.status_code)
print(request.user.username)
# Add user data in db....
if request.method == 'POST':
print(request.POST)
# Code to be executed for each request/response after
# the view is called.
return response
settings.py:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','myproject.middleware.SimpleMiddleware',
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。