7

Visit count rule

This commit is contained in:
Jasper Berghoef
2016-11-08 16:11:25 +01:00
parent 4b09406256
commit 201bf0355b
4 changed files with 93 additions and 0 deletions

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.3 on 2016-11-08 14:47
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('personalisation', '0005_referralrule'),
]
operations = [
migrations.CreateModel(
name='VisitCountRule',
fields=[
('abstractbaserule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='personalisation.AbstractBaseRule')),
],
bases=('personalisation.abstractbaserule',),
),
]

View File

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.3 on 2016-11-08 15:10
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('personalisation', '0006_visitcountrule'),
]
operations = [
migrations.AddField(
model_name='visitcountrule',
name='count',
field=models.PositiveSmallIntegerField(default=0),
),
migrations.AddField(
model_name='visitcountrule',
name='operator',
field=models.CharField(choices=[('more_than', 'More than'), ('less_than', 'Less than'), ('equal_to', 'Equal to')], default='ht', max_length=20),
),
]

View File

@ -94,3 +94,34 @@ class ReferralRule(AbstractBaseRule):
if pattern.search(referer):
return True
return False
"""
Visit count rule to segment users based on amount of visits
"""
class VisitCountRule(AbstractBaseRule):
OPERATOR_CHOICES = (
('more_than', 'More than'),
('less_than', 'Less than'),
('equal_to', 'Equal to'),
)
operator = models.CharField(max_length=20, choices=OPERATOR_CHOICES, default="ht")
count = models.PositiveSmallIntegerField(default=0)
def __init__(self, *args, **kwargs):
super(VisitCountRule, self).__init__(*args, **kwargs)
def test_user(self, request):
operator = self.operator
segment_count = self.count
visit_count = request.session.get('visit_count')
if operator is "more_than":
if visit_count > segment_count:
return True
elif operator is "less_than":
if visit_count < segment_count:
return True
elif operator is "equal_to":
if visit_count is segment_count:
return True
return False

View File

@ -16,6 +16,9 @@ def register_admin_urls():
]
"""
The base model for the Segments administration interface
"""
class SegmentModelAdmin(ModelAdmin):
model = Segment
menu_icon = 'group'
@ -25,3 +28,14 @@ class SegmentModelAdmin(ModelAdmin):
form_view_extra_css = ['personalisation/segment/form.css']
modeladmin_register(SegmentModelAdmin)
"""
Update the users visit count before each page visit
"""
@hooks.register('before_serve_page')
def set_visit_count(page, request, serve_args, serve_kwargs):
if request.session.get('visit_count'):
request.session['visit_count'] = request.session.get('visit_count') + 1
else:
request.session['visit_count'] = 1