|
from datetime import datetime
|
|
from app.extensions import db
|
|
from slugify import slugify
|
|
import random
|
|
import string
|
|
|
|
class Article(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
title = db.Column(db.String(200), nullable=False)
|
|
content = db.Column(db.Text, nullable=False)
|
|
summary = db.Column(db.Text)
|
|
slug = db.Column(db.String(200), unique=True, nullable=False)
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
if not kwargs.get('slug') and kwargs.get('title'):
|
|
base_slug = slugify(kwargs.get('title'))
|
|
slug = base_slug
|
|
counter = 1
|
|
|
|
|
|
while Article.query.filter_by(slug=slug).first() is not None:
|
|
|
|
random_string = ''.join(random.choices(string.ascii_lowercase + string.digits, k=4))
|
|
slug = f"{base_slug}-{random_string}"
|
|
|
|
kwargs['slug'] = slug
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
class Image(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
filename = db.Column(db.String(200), nullable=False)
|
|
data = db.Column(db.LargeBinary, nullable=False)
|
|
mime_type = db.Column(db.String(100), nullable=False)
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow) |