record.API 源代码
from datetime import datetime
from record.models import (
PageLog,
ModuleLog,
)
from utils.http.dependency import *
[文档]
def eventTrackingFunc(request: HttpRequest):
"""
用于处理埋点的视图函数。监测用户的访问情况并更新相关数据库表。
:param request: HTTP请求
:type request: HttpRequest
:return: 如未登录,返回一个重定向(到登录页面); 否则返回Json响应
:rtype: HttpResponseRedirect | JsonResponse
"""
# 首先检查有无登录,如未登录则重定向到登录页面
if not request.user.is_authenticated:
return redirect("/index/")
# unpack request:
logType = int(request.POST['Type'])
logUrl = request.POST['Url']
try:
logTime = int(request.POST['Time'])
logTime = datetime.fromtimestamp(logTime / 1000)
except:
logTime = datetime.now()
# 由于对PV/PD埋点的JavaScript脚本在base.html中实现,所以所有页面的PV/PD都会被track
logPlatform = request.POST.get('Platform', None)
try:
logExploreName, logExploreVer = request.POST['Explore'].rsplit(maxsplit=1)
except:
logExploreName, logExploreVer = None, None
kwargs = {}
kwargs.update(
user=request.user,
type=logType,
page=logUrl,
time=logTime,
platform=logPlatform,
explore_name=logExploreName,
explore_version=logExploreVer,
)
if logType in ModuleLog.CountType.values:
# Module类埋点
kwargs.update(
module_name=request.POST['Name'],
)
ModuleLog.objects.create(**kwargs)
elif logType in PageLog.CountType.values:
# Page类的埋点
PageLog.objects.create(**kwargs)
return JsonResponse({'status': 'ok'})