# Django Hitcount

***

**1. Basic Hit Counting**

```python
from django.contrib.contenttypes.fields import GenericRelation
from hitcount.models import HitCount

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    hits = GenericRelation(HitCount, object_id_field='object_pk', related_query_name='hits')
```

**2. Custom Hit Count Manager**

```python
from hitcount.models import HitCount, HitCountManager

class ArticleHitCountManager(HitCountManager):
    def get_for_object(self, instance):
        return super().get_for_object(instance).filter(hit_type='view')

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    hits = GenericRelation(HitCount, object_id_field='object_pk', related_name='hits', related_query_name='hits', manager=ArticleHitCountManager())
```

**3. Custom Hit Count QuerySet**

```python
from django.db.models import QuerySet
from hitcount.models import HitCount

class ViewHitCountQuerySet(QuerySet):
    def view(self):
        return self.filter(hit_type='view')

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    hits = GenericRelation(HitCount, object_id_field='object_pk', related_name='hits', related_query_name='hits')

    def get_view_hit_count(self):
        return self.hits.view().count()
```

**4. Hit Count Field**

```python
from hitcount.utils import get_hitcount_model

ArticleHitCount = get_hitcount_model()

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    hit_count = models.OneToOneField(ArticleHitCount, on_delete=models.CASCADE)
```

**5. Hit Count Abstract Model**

```python
from hitcount.models import HitCount, HitCountAbstractModel

class Article(HitCountAbstractModel):
    title = models.CharField(max_length=200)
    content = models.TextField()
```

**6. Hit Count Mixin**

```python
from hitcount.models import HitCountMixin

class Article(HitCountMixin, models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
```

**7. Hit Count Proxy Model**

```python
from hitcount.models import HitCountProxy

class ArticleHitCount(HitCountProxy):
    class Meta:
        proxy = Article
```

**8. Hit Count Middleware**

```python
from django.utils.deprecation import MiddlewareMixin
from hitcount.middleware import HitCountMiddleware

class MyHitCountMiddleware(MiddlewareMixin):
    def process_request(self, request):
        HitCountMiddleware().process_request(request)
```

**9. Hit Count Context Processor**

```python
from hitcount.context_processors import hitcount

def my_context_processor(request):
    return hitcount(request)
```

**10. Hit Count Template Tag**

```html

<div data-gb-custom-block data-tag="load"></div>

<div data-gb-custom-block data-tag="hitcount_for"></div>

<p>The article has been viewed {{ hit_count }} times.</p>
```

**11. Hit Count Signal**

```python
from django.db.models.signals import post_save
from hitcount.signals import hit_counted

def increment_hit_count(sender, **kwargs):
    hit_counted.send(sender, instance=kwargs['instance'])

post_save.connect(increment_hit_count, sender=Article)
```

**12. Hit Count Serialization**

```python
from hitcount.serializers import HitCountSerializer

serializer = HitCountSerializer(hit_count)
json_data = serializer.data
```

**13. Hit Count Deserialization**

```python
from hitcount.serializers import HitCountSerializer

data = {'object_id': 1, 'content_type': 'app.Article', 'hit_type': 'view', 'count': 10}
serializer = HitCountSerializer(data=data)
serializer.is_valid()
hit_count = serializer.save()
```

**14. Hit Count Model Manager**

```python
from hitcount.models import HitCountManager

class ArticleManager(HitCountManager):
    def popular(self):
        return super().popular('hits')

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    objects = ArticleManager()
```

**15. Hit Count Model QuerySet**

```python
from hitcount.models import HitCount

class ArticleQuerySet(models.QuerySet):
    def popular(self):
        return super().popular('hits')

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    objects = ArticleQuerySet.as_manager()
```

**16. Hit Count Model Field**

```python
from hitcount.fields import HitCountField

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    hit_count = HitCountField('hits')
```

**17. Hit Count Model Mixin**

```python
from hitcount.models import HitCountMixin

class Article(HitCountMixin, models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
```

**18. Hit Count Model Proxy**

```python
from hitcount.models import HitCountProxy

class ArticleHitCount(HitCountProxy):
    class Meta:
        proxy = Article
```

**19. Hit Count Model Middleware**

```python
from django.utils.deprecation import MiddlewareMixin
from hitcount.middleware import HitCountMiddleware

class MyHitCountMiddleware(MiddlewareMixin):
    def process_request(self, request):
        HitCountMiddleware().process_request(request)
```

**20. Hit Count Model Context Processor**

```python
from hitcount.context_processors import hitcount

def my_context_processor(request):
    return hitcount(request)
```

**21. Hit Count Model Template Tag**

```html

<div data-gb-custom-block data-tag="load"></div>

<div data-gb-custom-block data-tag="hitcount_for"></div>

<p>The article has been viewed {{ hit_count }} times.</p>
```

**22. Hit Count Model Signal**

```python
from django.db.models.signals import post_save
from hitcount.signals import hit_counted

def increment_hit_count(sender, **kwargs):
    hit_counted.send(sender, instance=kwargs['instance'])

post_save.connect(increment_hit_count, sender=Article)
```

**23. Hit Count Model Serialization**

```python
from hitcount.serializers import HitCountSerializer

serializer = HitCountSerializer(hit_count)
json_data = serializer.data
```

**24. Hit Count Model Deserialization**

```python
from hitcount.serializers import HitCountSerializer

data = {'object_id': 1, 'content_type': 'app.Article', 'hit_type': 'view', 'count': 10}
serializer = HitCountSerializer(data=data)
serializer.is_valid()
hit_count = serializer.save()
```

**25. Hit Count Model Manager**

```python
from hitcount.models import HitCountManager

class ArticleManager(HitCountManager):
    def popular(self):
        return super().popular('hits')

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    objects = ArticleManager()
```

**26. Hit Count Model QuerySet**

```python
from hitcount.models import HitCount

class ArticleQuerySet(models.QuerySet):
    def popular(self):
        return super().popular('hits')

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    objects = ArticleQuerySet.as_manager()
```

**27. Hit Count Model Field**

```python
from hitcount.fields import HitCountField

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    hit_count = HitCountField('hits')
```

**28. Hit Count Model Mixin**

```python
from hitcount.models import HitCountMixin

class Article(HitCountMixin, models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
```

**29. Hit Count Model Proxy**

```python
from hitcount.models import HitCountProxy

class ArticleHitCount(HitCountProxy):
    class Meta:
        proxy = Article
```

**30. Hit Count Model Middleware**

```python
from django.utils.deprecation import MiddlewareMixin
from hitcount.middleware import HitCountMiddleware

class MyHitCountMiddleware(MiddlewareMixin):
    def process_request(self, request):
        HitCountMiddleware().process_request(request)
```

**31. Hit Count Model Context Processor**

```python
from hitcount.context_processors import hitcount

def my_context_processor(request):
    return hitcount(request)
```

**32. Hit Count Model Template Tag**

```html

<div data-gb-custom-block data-tag="load"></div>

<div data-gb-custom-block data-tag="hitcount_for"></div>
<p>The article has been viewed {{ hit_count }} times.</p>
```

**33. Hit Count Model Signal**

```python
from django.db.models.signals import post_save
from hitcount.signals import hit_counted

def increment_hit_count(sender, **kwargs):
    hit_counted.send(sender, instance=kwargs['instance'])

post_save.connect(increment_hit_count, sender=Article)
```

**34. Hit Count Model Serialization**

```python
from hitcount.serializers import HitCountSerializer

serializer = HitCountSerializer(hit_count)
json_data = serializer.data
```

**35. Hit Count Model Deserialization**

```python
from hitcount.serializers import HitCountSerializer

data = {'object_id': 1, 'content_type': 'app.Article', 'hit_type': 'view', 'count': 10}
serializer = HitCountSerializer(data=data)
serializer.is_valid()
hit_count = serializer.save()
```

**36. Hit Count Model Manager**

```python
from hitcount.models import HitCountManager

class ArticleManager(HitCountManager):
    def popular(self):
        return super().popular('hits')

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    objects = ArticleManager()
```
