python - 每次用户点击页面时 Django 中间件进行记录
问题描述
正如标题所述,我正在尝试创建一个中间件,该中间件将记录用户每次点击页面时的记录。
这是我将使用的model.py:
class UserPageTracking(models.Model):
""" Page hits with user info """
id = models.AutoField(db_column='ID', primary_key=True)
user_id = models.CharField(db_column='USER_ID', max_length=8, default="")
url = models.URLField(db_column='URL')
date_visited = models.DateTimeField(db_column='DATE_VISITED', auto_now_add=True)
class Meta:
managed = True
db_table = 'page_views'
这是我的中间件中的内容:
from .models import UserPageTracking
class UserPageTrackingMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
user_id = request.user.username
# not every request will have a http_referer, so when it doesn't just ignore it and don't save anything
to_url = request.META.get('HTTP_REFERER')
if to_url:
user_page_tracking = UserPageTracking.objects.create(
url=to_url, user_id=user_id
)
user_page_tracking.save()
return response
我的设置.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',
'app.middleware.user.UserMiddleware',
'app.middleware.user_page_tracking.UserPageTrackingMiddleware'
]
这很好用,唯一的问题是每次我加载一个页面/转到一个页面时,它都会多次点击这个中间件(至少两次,有时像 3 或 4 次)。当我检查数据库时,我将有 3 - 4 个条目,它们之间的间隔约为 40 - 50 毫秒。
我做错了什么,或者这是我不能通过中间件做的事情,我必须做其他事情来记录用户活动。
解决方案
推荐阅读
- sockets - 如果其他人在 vuejs 中打开了相同的记录,则禁用记录
- android - 带有 MVVM 和改造的 RXjava
- javascript - 有什么办法可以只从这个字符串中获取 URL 吗?
- excel - 通过不使用范围过滤 VBA 中的月份范围
- python - 使用 PyQt5 lineEdit 小部件,有什么简单的方法只有整数值可用?
- c# - Surface pro 上的深度和红外框架
- javascript - Google API 为付费 Chrome 扩展返回 No License
- syntax - 有没有办法让 GAMS 中断并从它持续的地方重新运行?
- powerapps - 我们可以像 Power Apps 一样将 Power Apps 门户发布到应用程序源吗?
- javascript - UnhandledPromiseRejectionWarning: TypeError: undefined is not a function