| 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) |