app/django/contrib/sites/models.py
changeset 54 03e267d67478
child 323 ff1a9aa48cfd
equal deleted inserted replaced
53:57b4279d8c4e 54:03e267d67478
       
     1 from django.db import models
       
     2 from django.utils.translation import ugettext_lazy as _
       
     3 
       
     4 SITE_CACHE = {}
       
     5 
       
     6 class SiteManager(models.Manager):
       
     7     def get_current(self):
       
     8         """
       
     9         Returns the current ``Site`` based on the SITE_ID in the
       
    10         project's settings. The ``Site`` object is cached the first
       
    11         time it's retrieved from the database.
       
    12         """
       
    13         from django.conf import settings
       
    14         try:
       
    15             sid = settings.SITE_ID
       
    16         except AttributeError:
       
    17             from django.core.exceptions import ImproperlyConfigured
       
    18             raise ImproperlyConfigured("You're using the Django \"sites framework\" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting to fix this error.")
       
    19         try:
       
    20             current_site = SITE_CACHE[sid]
       
    21         except KeyError:
       
    22             current_site = self.get(pk=sid)
       
    23             SITE_CACHE[sid] = current_site
       
    24         return current_site
       
    25 
       
    26     def clear_cache(self):
       
    27         """Clears the ``Site`` object cache."""
       
    28         global SITE_CACHE
       
    29         SITE_CACHE = {}
       
    30 
       
    31 class Site(models.Model):
       
    32     domain = models.CharField(_('domain name'), max_length=100)
       
    33     name = models.CharField(_('display name'), max_length=50)
       
    34     objects = SiteManager()
       
    35     class Meta:
       
    36         db_table = 'django_site'
       
    37         verbose_name = _('site')
       
    38         verbose_name_plural = _('sites')
       
    39         ordering = ('domain',)
       
    40     class Admin:
       
    41         list_display = ('domain', 'name')
       
    42         search_fields = ('domain', 'name')
       
    43 
       
    44     def __unicode__(self):
       
    45         return self.domain
       
    46 
       
    47 class RequestSite(object):
       
    48     """
       
    49     A class that shares the primary interface of Site (i.e., it has
       
    50     ``domain`` and ``name`` attributes) but gets its data from a Django
       
    51     HttpRequest object rather than from a database.
       
    52 
       
    53     The save() and delete() methods raise NotImplementedError.
       
    54     """
       
    55     def __init__(self, request):
       
    56         self.domain = self.name = request.get_host()
       
    57 
       
    58     def __unicode__(self):
       
    59         return self.domain
       
    60 
       
    61     def save(self):
       
    62         raise NotImplementedError('RequestSite cannot be saved.')
       
    63 
       
    64     def delete(self):
       
    65         raise NotImplementedError('RequestSite cannot be deleted.')