예제 #1
0
class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))

    def blogposts(self, pagenum=1):
        return self.BlogPost.order_by(desc(BlogPost.id))\
            .paginate(pagenum, 2, error_out=False)

    def blogposts_published(self, pagenum=1):
        return self.BlogPost\
            .filter_by(published=True)\
            .order_by(desc(BlogPost.id))\
            .paginate(pagenum, 2, error_out=False)

    @staticmethod
    def get_or_create(name):
        try:
            return Tag.query.filter_by(name=name).one()
        except NoResultFound:
            return Tag(name=name)

    @staticmethod
    def all():
        return Tag.query.all()

    def __repr__(self):
        return self.name
예제 #2
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    password_hash = db.Column(db.String)

    @property
    def password(self):
        raise AttributeError('Password - read-only field')

    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    @staticmethod
    def get_by_username(username):
        return User.query.filter_by(username=username).first()

    def __repr__(self):
        return "User '{}'".format(self.username)
예제 #3
0
class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    sender = db.Column(db.String(128))
    picture_url = db.Column(db.String(128))
    date = db.Column(db.DateTime)
    content = db.Column(db.String(516))
    blogpost_id = db.Column(db.Integer,
                            db.ForeignKey('blog_post.id'),
                            nullable=False)
    level = db.Column(db.Integer)

    @staticmethod
    def get_all():
        return Comment.query.all()

    def get_blogpost(self):
        return BlogPost.get_by_id(self.blogpost_id)

    def markup_content(self):
        return Markup(markdown(self.content))

    def formated_date(self):
        return "{0:%d.%m.%Y  %I:%M%p}".format(self.date).upper()
예제 #4
0
class BlogPost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    _title = db.Column(db.String(128))
    date = db.Column(db.DateTime)
    content = db.Column(db.String)
    imagePath = db.Column(db.String)
    published = db.Column(db.Boolean)
    url = db.Column(db.String(128))
    _tags = db.relationship('Tag',
                            secondary=tags,
                            lazy='joined',
                            backref=db.backref('BlogPost', lazy='dynamic'))
    comments = db.relationship('Comment',
                               cascade="all,delete",
                               backref='blogpost',
                               lazy='dynamic')

    def __repr__(self):
        return self.title

    @staticmethod
    def get_by_url(url):
        return BlogPost.query.filter_by(url=url).first()

    def get_by_title(title):
        return BlogPost.query.filter_by(_title=title).first()

    @staticmethod
    def get_by_id(post_id):
        return BlogPost.query.get(post_id)

    @staticmethod
    def get_all():
        return BlogPost.query.all()

    @staticmethod
    def published_blogposts_page(pagenum):
        blogposts = BlogPost.query\
            .filter_by(published=True)\
            .order_by(desc(BlogPost.id))\
            .paginate(pagenum, 2, error_out=False)
        return blogposts

    @staticmethod
    def blogposts_page(pagenum):
        blogposts = BlogPost.query\
            .order_by(desc(BlogPost.id))\
            .paginate(pagenum, 2, error_out=False)
        return blogposts

    def markup_content(self):
        return Markup(markdown(self.content))

    def intro_content(self):
        return self.markup_content()[:700]

    def formated_date(self):
        return "{0:%B %d, %Y}".format(self.date).upper()

    @property
    def title(self):
        return self._title

    @title.setter
    def title(self, string):
        self._title = string
        self.url = (re.sub('[^0-9a-zA-Z ]+', '', string)).replace(' ', '-')

    @property
    def tags(self):
        return ",".join([tag.name for tag in self._tags])

    @tags.setter
    def tags(self, string):
        if string:
            self._tags = [Tag.get_or_create(tag) for tag in string.split(',')]
        else:
            self._tags = []
예제 #5
0
from sqlalchemy import desc
from sqlalchemy.orm import backref
from flask import Markup
from markdown import markdown
import re
from sqlalchemy.orm.exc import NoResultFound

from my_blog.app import db

tags = db.Table(
    'blogpost_tag', db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
    db.Column('blogpost_id', db.Integer, db.ForeignKey('blog_post.id')))


class BlogPost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    _title = db.Column(db.String(128))
    date = db.Column(db.DateTime)
    content = db.Column(db.String)
    imagePath = db.Column(db.String)
    published = db.Column(db.Boolean)
    url = db.Column(db.String(128))
    _tags = db.relationship('Tag',
                            secondary=tags,
                            lazy='joined',
                            backref=db.backref('BlogPost', lazy='dynamic'))
    comments = db.relationship('Comment',
                               cascade="all,delete",
                               backref='blogpost',
                               lazy='dynamic')