7

now adds segments of a user to the session

This commit is contained in:
Boris Besemer
2016-11-07 15:42:03 +01:00
parent e7accad575
commit eac54cda50
3 changed files with 42 additions and 7 deletions

View File

@ -1,4 +1,4 @@
from personalisation.models import TimeRule
from personalisation.models import Segment, TimeRule
class SegmentMiddleware(object):
"""Middleware for testing and putting a user in a segment"""
@ -7,16 +7,21 @@ class SegmentMiddleware(object):
self.get_response = get_response
def __call__(self, request):
time_rules = TimeRule.objects.all()
segments = Segment.objects.all().filter(status="live")
result = False
chosen_segments = []
for rule in time_rules:
result = rule.test_user()
for segment in segments:
result = False
rules = TimeRule.objects.all().filter(segment=segment)
for rule in rules:
result = rule.test_user()
if result:
chosen_segments.append(segment.encoded_name())
request.session['segmented'] = result
request.session['segments'] = chosen_segments
response = self.get_response(request)
print(request.session['segmented'])
print(request.session['segments'])
return response

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.3 on 2016-11-07 14:34
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('personalisation', '0003_abstractrulebase_segment'),
]
operations = [
migrations.AddField(
model_name='segment',
name='status',
field=models.CharField(choices=[('disabled', 'Disabled'), ('live', 'Live'), ('completed', 'Completed')], default='disabled', max_length=20),
),
]

View File

@ -17,6 +17,12 @@ Model for a new segment
@python_2_unicode_compatible
class Segment(ClusterableModel):
name = models.CharField(max_length=255)
STATUS_CHOICES = (
('disabled', 'Disabled'),
('live', 'Live'),
('completed', 'Completed'),
)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="disabled")
panels = [
FieldPanel('name'),
@ -25,6 +31,10 @@ class Segment(ClusterableModel):
def __str__(self):
return self.name
def encoded_name(self):
return "".join(self.name.lower().split())
"""
Base for creating rules to segment users with