Skip to content

Commit c332374

Browse files
committed
Cache lookups.
Fixes philipn#3.
1 parent d15087f commit c332374

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

block_ip/middleware.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.http import HttpResponseForbidden
22
from django.conf import settings
3+
from django.core.cache import cache
34

45
from models import BlockIP
56

@@ -22,7 +23,11 @@ def process_request(self, request):
2223
ip = get_ip(request)
2324
# TODO: Look into something more optimized for large numbers
2425
# of blocks. https://github.com/jimfunk/django-postgresql-netfields
25-
deny_ips = [i.get_network() for i in BlockIP.objects.all()]
26+
block_ips = cache.get('blockip:list')
27+
if block_ips is None:
28+
block_ips = BlockIP.objects.all()
29+
cache.set('blockip:list', block_ips)
30+
deny_ips = [i.get_network() for i in block_ips]
2631

2732
for net in deny_ips:
2833
if ip in net:

block_ip/models.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from django.db import models
44
from django.utils.translation import ugettext_lazy as _
5+
from django.core.cache import cache
6+
from django.db.models.signals import post_save, post_delete
57

68

79
class BlockIP(models.Model):
@@ -17,3 +19,11 @@ def get_network(self):
1719
class Meta:
1820
verbose_name = _('IPs & masks to ban')
1921
verbose_name_plural = _('IPs & masks to ban')
22+
23+
24+
def _clear_cache(sender, instance, **kwargs):
25+
cache.set('blockip:list', BlockIP.objects.all())
26+
27+
28+
post_save.connect(_clear_cache, sender=BlockIP)
29+
post_delete.connect(_clear_cache, sender=BlockIP)

0 commit comments

Comments
 (0)