8

Moved the visit count function, saving more information (timestamp and segment id) in the segments session

This commit is contained in:
Jasper Berghoef
2016-11-10 10:55:34 +01:00
parent 821dcccfcb
commit 78f4a085dd
2 changed files with 21 additions and 9 deletions

View File

@@ -1,5 +1,5 @@
from personalisation.models import AbstractBaseRule, Segment from personalisation.models import AbstractBaseRule, Segment
import time
class SegmentMiddleware(object): class SegmentMiddleware(object):
"""Middleware for testing and putting a user in a segment""" """Middleware for testing and putting a user in a segment"""
@@ -29,8 +29,6 @@ class SegmentMiddleware(object):
self.add_segment_to_user(segment, request) self.add_segment_to_user(segment, request)
response = self.get_response(request) response = self.get_response(request)
print(request.session['segments'])
return response return response
def test_rules(self, rules, request): def test_rules(self, rules, request):
@@ -46,10 +44,19 @@ class SegmentMiddleware(object):
return False return False
def add_segment_to_user(self, segment, request): def add_segment_to_user(self, segment, request):
"""Register the request to the Segment model as visit """Save the segment in the user session"""
and save the segment in the user session""" def check_if_segmented(segment):
segment.visit_count = segment.visit_count + 1 """Check if the user has been segmented"""
segment.save() for seg in request.session['segments']:
if seg['encoded_name'] == segment.encoded_name():
return True
return False
if segment.encoded_name() not in request.session['segments']: if not check_if_segmented(segment):
request.session['segments'].append(segment.encoded_name()) # Clear segments session on browser close.
segdict = {
"encoded_name": segment.encoded_name(),
"id": segment.pk,
"timestamp": int(time.time()),
}
request.session['segments'].append(segdict)

View File

@@ -34,6 +34,11 @@ modeladmin_register(SegmentModelAdmin)
@hooks.register('before_serve_page') @hooks.register('before_serve_page')
def set_visit_count(page, request, serve_args, serve_kwargs): def set_visit_count(page, request, serve_args, serve_kwargs):
"""Update the users visit count before each page visit.""" """Update the users visit count before each page visit."""
for seg in request.session['segments']:
segment = Segment.objects.get(pk=seg['id'])
segment.visit_count = segment.visit_count + 1
segment.save()
if 'visit_count' not in request.session: if 'visit_count' not in request.session:
request.session['visit_count'] = 1 request.session['visit_count'] = 1
else: else: