changeset 54:e249b5f9d180

#3, #4: clear caches when saving profile, bulletins, and news. Broke up the stuff on the home page for finer control of caching.
author Brian Neal <bgneal@gmail.com>
date Tue, 23 Jun 2009 00:11:00 +0000
parents f882ac8ce255
children 146ded23d05c
files gpp/bio/models.py gpp/bulletins/models.py gpp/news/models.py gpp/templates/home.html
diffstat 4 files changed, 102 insertions(+), 83 deletions(-) [+]
line wrap: on
line diff
--- a/gpp/bio/models.py	Sun Jun 21 22:41:58 2009 +0000
+++ b/gpp/bio/models.py	Tue Jun 23 00:11:00 2009 +0000
@@ -9,6 +9,7 @@
 from django.contrib import auth
 from django.conf import settings
 from django.template.loader import render_to_string
+from django.core.cache import cache
 
 
 def avatar_file_path_for_user(username, filename):
@@ -46,4 +47,5 @@
         html = render_to_string('bio/markdown.html', {'data': self.signature})
         self.signature_html = html.strip()
         super(UserProfile, self).save(*args, **kwargs)
+        cache.delete('avatar_' + self.user.username)
 
--- a/gpp/bulletins/models.py	Sun Jun 21 22:41:58 2009 +0000
+++ b/gpp/bulletins/models.py	Tue Jun 23 00:11:00 2009 +0000
@@ -5,34 +5,41 @@
 import datetime
 from django.db import models
 from django.db.models import Q
+from django.core.cache import cache
 
 
 class BulletinManager(models.Manager):
-   """Manager for the Bulletin model."""
+    """Manager for the Bulletin model."""
 
-   def get_current(self):
-      now = datetime.datetime.now()
-      return self.filter(
-            Q(is_enabled=True),
-            Q(start_date__lte=now),
-            Q(end_date__isnull=True) | Q(end_date__gte=now))
+    def get_current(self):
+        now = datetime.datetime.now()
+        return self.filter(
+                Q(is_enabled=True),
+                Q(start_date__lte=now),
+                Q(end_date__isnull=True) | Q(end_date__gte=now))
 
 
 class Bulletin(models.Model):
-   """Model to represent site bulletins."""
-   title = models.CharField(max_length=200)
-   text = models.TextField()
-   start_date = models.DateTimeField(db_index=True,
-         help_text='Start date for when the bulletin will be active.',)
-   end_date = models.DateTimeField(blank=True, null=True, db_index=True,
-         help_text='End date for the bulletin. Leave blank to keep it open-ended.')
-   is_enabled = models.BooleanField(default=True, db_index=True,
-         help_text='Check to allow the bulletin to be viewed on the site.')
+    """Model to represent site bulletins."""
+    title = models.CharField(max_length=200)
+    text = models.TextField()
+    start_date = models.DateTimeField(db_index=True,
+            help_text='Start date for when the bulletin will be active.',)
+    end_date = models.DateTimeField(blank=True, null=True, db_index=True,
+            help_text='End date for the bulletin. Leave blank to keep it open-ended.')
+    is_enabled = models.BooleanField(default=True, db_index=True,
+            help_text='Check to allow the bulletin to be viewed on the site.')
 
-   objects = BulletinManager()
+    objects = BulletinManager()
 
-   def __unicode__(self):
-      return self.title
+    class Meta:
+        ordering = ('-start_date', )
 
-   class Meta:
-      ordering = ('-start_date', )
+    def __unicode__(self):
+        return self.title
+
+    def save(self, force_insert=False, force_update=False):
+        super(Bulletin, self).save(force_insert, force_update)
+        cache.delete('home_bulletins')
+
+     
--- a/gpp/news/models.py	Sun Jun 21 22:41:58 2009 +0000
+++ b/gpp/news/models.py	Tue Jun 23 00:11:00 2009 +0000
@@ -5,83 +5,89 @@
 import datetime
 from django.db import models
 from django.contrib.auth.models import User
+from django.core.cache import cache
 from tagging.fields import TagField
 
 
 class Category(models.Model):
-   """News stories belong to categories"""
-   title = models.CharField(max_length = 64)
-   icon = models.ImageField(upload_to='news/categories/', blank=True)
+    """News stories belong to categories"""
+    title = models.CharField(max_length = 64)
+    icon = models.ImageField(upload_to='news/categories/', blank=True)
 
-   def __unicode__(self):
-      return self.title
+    def __unicode__(self):
+        return self.title
 
-   def num_stories(self):
-      return News.objects.filter(category = self.pk).count()
+    def num_stories(self):
+        return News.objects.filter(category = self.pk).count()
 
-   class Meta:
-      verbose_name_plural = 'Categories'
-      ordering = ('title', )
+    class Meta:
+        verbose_name_plural = 'Categories'
+        ordering = ('title', )
 
 
 class PendingStory(models.Model):
-   """Stories submitted by users are held pending admin approval"""
-   title = models.CharField(max_length=255)
-   submitter = models.ForeignKey(User)
-   category = models.ForeignKey(Category)
-   short_text = models.TextField()
-   long_text = models.TextField(blank=True)
-   date_submitted = models.DateTimeField(auto_now_add=True, db_index=True)
-   allow_comments = models.BooleanField(default=True)
-   approved = models.BooleanField(default=False)
-   tags = TagField()
+    """Stories submitted by users are held pending admin approval"""
+    title = models.CharField(max_length=255)
+    submitter = models.ForeignKey(User)
+    category = models.ForeignKey(Category)
+    short_text = models.TextField()
+    long_text = models.TextField(blank=True)
+    date_submitted = models.DateTimeField(auto_now_add=True, db_index=True)
+    allow_comments = models.BooleanField(default=True)
+    approved = models.BooleanField(default=False)
+    tags = TagField()
 
-   def save(self, force_insert = False, force_update = False):
-      if self.approved:
-         Story.objects.create(title=self.title,
-               submitter=self.submitter,
-               category=self.category,
-               short_text=self.short_text,
-               long_text=self.long_text,
-               allow_comments=self.allow_comments,
-               date_published=datetime.datetime.now(),
-               tags=self.tags)
-         self.delete()
-      else:
-         super(PendingStory, self).save(force_insert, force_update)
+    def save(self, force_insert = False, force_update = False):
+        if self.approved:
+            Story.objects.create(title=self.title,
+                    submitter=self.submitter,
+                    category=self.category,
+                    short_text=self.short_text,
+                    long_text=self.long_text,
+                    allow_comments=self.allow_comments,
+                    date_published=datetime.datetime.now(),
+                    tags=self.tags)
+            self.delete()
+            cache.delete('home_news')
+        else:
+            super(PendingStory, self).save(force_insert, force_update)
 
-   def __unicode__(self):
-      return self.title
+    def __unicode__(self):
+        return self.title
 
-   class Meta:
-      ordering = ('-date_submitted', )
-      verbose_name_plural = 'Pending Stories'
+    class Meta:
+        ordering = ('-date_submitted', )
+        verbose_name_plural = 'Pending Stories'
 
 
 class Story(models.Model):
-   """Model for news stories"""
-   title = models.CharField(max_length=255)
-   submitter = models.ForeignKey(User)
-   category = models.ForeignKey(Category)
-   short_text = models.TextField()
-   long_text = models.TextField(blank=True)
-   allow_comments = models.BooleanField(default=True)
-   date_published = models.DateTimeField(db_index=True)
-   tags = TagField()
+    """Model for news stories"""
+    title = models.CharField(max_length=255)
+    submitter = models.ForeignKey(User)
+    category = models.ForeignKey(Category)
+    short_text = models.TextField()
+    long_text = models.TextField(blank=True)
+    allow_comments = models.BooleanField(default=True)
+    date_published = models.DateTimeField(db_index=True)
+    tags = TagField()
 
-   @models.permalink
-   def get_absolute_url(self):
-      return ('news.views.story', [str(self.id)])
+    @models.permalink
+    def get_absolute_url(self):
+        return ('news.views.story', [str(self.id)])
 
-   def __unicode__(self):
-      return self.title
+    def __unicode__(self):
+        return self.title
 
-   class Meta:
-      ordering = ('-date_published', )
-      verbose_name_plural = 'Stories'
+    class Meta:
+        ordering = ('-date_published', )
+        verbose_name_plural = 'Stories'
 
-   def can_comment_on(self):
-      now = datetime.datetime.now()
-      delta = now - self.date_published
-      return delta.days < 30
+    def can_comment_on(self):
+        now = datetime.datetime.now()
+        delta = now - self.date_published
+        return delta.days < 30
 
+    def save(self, force_insert=False, force_update=False):
+        super(Story, self).save(force_insert, force_update)
+        cache.delete('home_news')
+
--- a/gpp/templates/home.html	Sun Jun 21 22:41:58 2009 +0000
+++ b/gpp/templates/home.html	Tue Jun 23 00:11:00 2009 +0000
@@ -36,9 +36,13 @@
 permanent. The site (content, user accounts, etc.) may be wiped at any time while we fix bugs and add features. 
 Also, I hope that the look and feel of this site can be greatly improved to something really cool! I'll need
 lots of help for this aspect, as I'm more of a coder than a designer.</p>
-{% cache 600 home_content %}
-{% current_bulletins %}
-{% current_news %}
+{% cache 3600 home_bulletins %}
+   {% current_bulletins %}
+{% endcache %}
+{% cache 3600 home_news %}
+   {% current_news %}
+{% endcache %}
+{% cache 3600 home_new_stuff %}
 <div class="span-9 append-1">
    {% latest_weblinks %} 
 </div>