Exemplo n.º 1
0
class Comment(db.Model):
    __tablename__ = 'comments'

    body = db.Column(db.Text, nullable=False)
    post_id = db.Column(db.Integer,
                        db.ForeignKey('posts.id'),
                        nullable=False,
                        index=True)
    post = db.relationship('Post', backref=db.backref('comments', lazy=True))
    user_id = db.Column(db.Integer,
                        db.ForeignKey('users.id'),
                        nullable=False,
                        index=True)
    user = db.relationship('User', backref=db.backref('comments', lazy=True))

    def __repr__(self):
        return '<Comment {body}>'.format(body=self.body[:20])

    @property
    def author_name(self):
        return self.user.username

    @property
    def html_body(self):
        return Markup(linkify(escape(self.body)))
Exemplo n.º 2
0
class Page(db.Model, CMSModel):
    __tablename__ = 'pages'

    title = db.Column(db.String, nullable=False)
    slug = db.Column(db.String, unique=True, nullable=False, index=True)
    body = db.Column(db.Text, nullable=False)

    def __init__(self, *args, **kwargs):
        if not kwargs.get('slug'):
            kwargs['slug'] = self.slugify(kwargs.get('title', ''))
        super(Page, self).__init__(*args, **kwargs)

    def __repr__(self):
        return '<Page {title}>'.format(title=self.title)
Exemplo n.º 3
0
class Tag(db.Model):
    __tablename__ = 'tags'

    name = db.Column(db.String, nullable=False, index=True, unique=True)
    slug = db.Column(db.String, nullable=False, index=True, unique=True)
    posts = db.relationship('Post', secondary=posts_tags,
                            back_populates='tags', lazy=True)

    def __init__(self, *args, **kwargs):
        if not kwargs.get('slug'):
            kwargs['slug'] = slugify(kwargs.get('name', ''))
        super(Tag, self).__init__(*args, **kwargs)

    def __repr__(self):
        return '<Tag {name}>'.format(name=self.name)
Exemplo n.º 4
0
class Image(db.Model):
    __tablename__ = 'images'

    name = db.Column(db.String, nullable=False, index=True)
    image = db.Column(db.LargeBinary, nullable=False)
    mimetype = db.Column(db.String, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    user = db.relationship('User', backref=db.backref('images', lazy=True))

    def __repr__(self):
        return '<Image {name}>'.format(name=self.name)

    @property
    def url(self):
        return '/images/{id}/{name}'.format(
            id=self.id, name=quote(self.name, safe=''))
Exemplo n.º 5
0
class User(db.Model, UserMixin):
    __tablename__ = 'users'

    username = db.Column(db.String, unique=True, nullable=False, index=True)
    user_type = db.Column(db.String, nullable=False, default='commenter')
    password_hash = db.Column(db.String, nullable=False)
    USER_LEVELS = ['admin', 'user', 'commenter']

    def __init__(self, *args, **kwargs):
        if 'password' in kwargs:
            kwargs['password_hash'] = bcrypt.generate_password_hash(
                kwargs['password'])
            del kwargs['password']
        super(User, self).__init__(*args, **kwargs)

    def __repr__(self):
        return '<User {username}>'.format(username=self.username)

    def set_password(self, password):
        self.password_hash = bcrypt.generate_password_hash(password)

    def valid_password(self, password):
        return bcrypt.check_password_hash(self.password_hash, password)

    def authorized_for(self, user_type):
        for level in self.USER_LEVELS:
            if level == self.user_type:
                return True
            if level == user_type:
                return False

    @property
    def is_admin(self):
        return self.user_type == 'admin'

    @property
    def can_post(self):
        return self.authorized_for('user')

    def can_edit(self, user):
        return self.id == user.id or user.is_admin
Exemplo n.º 6
0
class Post(db.Model, CMSModel):
    __tablename__ = 'posts'

    title = db.Column(db.String, nullable=False)
    slug = db.Column(db.String, unique=True, nullable=False, index=True)
    body = db.Column(db.Text, nullable=False)
    published_at = db.Column(db.DateTime, index=True)
    user_id = db.Column(db.Integer,
                        db.ForeignKey('users.id'),
                        nullable=False,
                        index=True)
    user = db.relationship('User', backref=db.backref('posts', lazy=True))
    tags = db.relationship('Tag',
                           secondary=posts_tags,
                           back_populates='posts',
                           lazy=True)

    def __init__(self, *args, **kwargs):
        if not kwargs.get('slug'):
            kwargs['slug'] = self.slugify(kwargs.get('title'))
        super(Post, self).__init__(*args, **kwargs)

    def __repr__(self):
        return '<Post {title}>'.format(title=self.title)

    @property
    def author_name(self):
        return self.user.username

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

    @hybrid_property
    def published(self):
        return self.published_at and self.published_at <= datetime.utcnow()

    def can_edit(self, user):
        if not user.is_authenticated:
            return False
        return user.is_admin or self.user_id == user.id
Exemplo n.º 7
0
from sarabande import db

posts_tags = db.Table(
    'posts_tags', db.Model.metadata,
    db.Column('post_id',
              db.Integer,
              db.ForeignKey('posts.id'),
              nullable=False,
              index=True),
    db.Column('tag_id',
              db.Integer,
              db.ForeignKey('tags.id'),
              nullable=False,
              index=True))