import hashlib
from django.conf import settings
from django.db import models
from django.utils.text import slugify
UPLOAD_ROOT = 'images/'
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(unique=True)
description = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
def save(self, *args, **kwargs):
if not self.slug or self.slug == '':
self.slug = slugify(self.name)
return super(Category, self).save(*args, **kwargs)
def __str__(self):
return self.name
class Tag(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(unique=True)
description = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
def save(self, *args, **kwargs):
if not self.slug or self.slug == '':
self.slug = slugify(self.name)
return super(Tag, self).save(*args, **kwargs)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, unique=True)
body = models.TextField(blank=True)
date = models.DateTimeField(auto_now_add=False)
post_image = models.ImageField(upload_to="{}/cover_images".format(UPLOAD_ROOT), blank=True)
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
category = models.ForeignKey(
'Category',
on_delete=models.CASCADE,
)
tags = models.ManyToManyField('Tag', blank=True)
is_public = models.BooleanField(default=False)
views = models.IntegerField(default=0)
def save(self, *args, **kwargs):
if not self.slug or self.slug == '':
self.slug = slugify(self.title)
return super(Post, self).save(*args, **kwargs)
def __str__(self):
return str(self.title)
class AnonymousCommentUser(models.Model):
name = models.CharField(max_length=32)
email = models.CharField(max_length=32)
token = models.CharField(max_length=128, unique=True)
avatar = models.CharField(max_length=128, blank=True)
@classmethod
def get_or_create(cls, email, token, avatar=''):
email_hash = hashlib.md5(email.encode('utf-8')).hexdigest()
token_hash = hashlib.sha256(token.encode('utf-8')).hexdigest()
return cls(email=email_hash, token=token_hash, avatar=avatar)
def __str__(self):
return self.name + "(" + self.email + ")"
class Comment(models.Model):
post = models.ForeignKey(
'Post',
on_delete=models.CASCADE,
)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
blank=True,
null=True,
)
anonymous_user = models.ForeignKey(
'AnonymousCommentUser',
on_delete=models.CASCADE,
blank=True,
null=True,
)
body = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
edited = models.BooleanField(default=False)
edited_at = models.DateTimeField(blank=True, null=True)
def __str__(self):
return self.body[:50] + '...' if len(self.body) > 50 else self.body