class Blog(db.Model, ModelMixin): __tablename__ = 'blogs' CONTENT_TYPE_MARKDOWN = '0' CONTENT_TYPE_ORGMODE = '1' CONTENT_TYPE = (('0', 'markdown'), ('1', 'org-mode')) id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(50), nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow(), nullable=False) updated_at = db.Column(db.DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow()) content = db.Column(db.Text, nullable=False) content_type = db.Column(db.String(10), nullable=False, default=CONTENT_TYPE_MARKDOWN) is_copy = db.Column(db.Boolean, nullable=True, default=False) category_id = db.Column(db.Integer, db.ForeignKey('categories.id', ondelete="CASCADE")) category = db.relationship('Category', backref=db.backref('blogs', cascade='all,delete-orphan', lazy='dynamic')) author_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete="CASCADE")) author = db.relationship('User', backref=db.backref('blogs', cascade='all,delete-orphan', lazy='dynamic')) __mapper_args__ = {"order_by": created_at.desc()} def __repr__(self): return "<Blog %r>" % self.title def __str__(self): return self.title def to_json(self): return { 'id': self.id, 'title': self.title, 'category': self.category.name, 'tags': ','.join([tag.name for tag in self.tags]), 'author': self.author.username } @property def read_times(self): return Record.get(self.id) @read_times.setter def read_times(self, value): Record.set('article:{}'.format(self.id))
class TimeLine(db.Model, ModelMixin): __tablename__ = 'timeline' id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text, nullable=False) hide = db.Column(db.Boolean, nullable=True, default=False) created_at = db.Column(db.DateTime, default=datetime.utcnow(), nullable=False) updated_at = db.Column(db.DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow()) author_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete="CASCADE")) author = db.relationship(User, backref=db.backref('timelines', cascade='all,delete-orphan', lazy='dynamic')) def __repr__(self): return "<TimeLine %r>" % self.content[:10] def __str__(self): return self.content[:10] def to_json(self): return {'id': self.id, 'content': self.content, 'hide': self.hide}
class Comment(db.Model, ModelMixin): __tablename__ = 'comments' id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime, default=datetime.utcnow(), nullable=False) content = db.Column(db.Text, nullable=False) blog_id = db.Column(db.Integer, db.ForeignKey('blogs.id', ondelete="CASCADE")) blog = db.relationship('Blog', backref=db.backref('comments', cascade='all,delete-orphan', lazy='dynamic')) author_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete="CASCADE")) author = db.relationship('User', backref=db.backref('comments', cascade='all,delete-orphan', lazy='dynamic')) def __repr__(self): return "<Comment %r>" % self.content
class Question(db.Model, ModelMixin): __tablename__ = 'questions' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(48), nullable=False) describ = db.Column(db.Text, nullable=False) answer = db.Column(db.Text, nullable=False) is_private = db.Column(db.Boolean, default=False, nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow(), nullable=False) author_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete="CASCADE")) author = db.relationship('User', backref=db.backref('questions', cascade='all,delete-orphan', lazy='dynamic')) __mapper_args__ = {"order_by": created_at.desc()} def __repr__(self): return "<Question %r>" % self.title def __str__(self): return self.title
#!/usr/bin/env python # -*- coding: utf-8 -*- # ************************************************************************* # Copyright © 2015 JiangLin. All rights reserved. # File Name: models.py # Author:JiangLin # Mail:[email protected] # Created Time: 2015-11-08 06:42:40 # ************************************************************************* from maple.extensions import db from datetime import datetime from flask_maple.models import ModelMixin from maple.utils import Record tag_blog = db.Table( 'tag_blog', db.Column('tags_id', db.Integer, db.ForeignKey('tags.id')), db.Column('blogs_id', db.Integer, db.ForeignKey('blogs.id'))) class Tags(db.Model, ModelMixin): __tablename__ = 'tags' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) blogs = db.relationship('Blog', secondary=tag_blog, backref=db.backref('tags', lazy='dynamic'), lazy='dynamic') def __repr__(self): return '<Tags %r>' % self.name
from maple.common.models import BaseModel from flask_login import UserMixin from werkzeug.security import generate_password_hash, \ check_password_hash from datetime import datetime from flask_maple.permission.models import Group from itsdangerous import (URLSafeTimedSerializer, BadSignature, SignatureExpired) from flask import current_app ROLES = [('admin', 'admin'), ('editor', 'editor'), ('writer', 'writer'), ('visitor', 'visitor')] group_user = db.Table( 'group_user', db.Column('group_id', db.Integer, db.ForeignKey('groups.id')), db.Column('user_id', db.Integer, db.ForeignKey('users.id'))) class User(db.Model, UserMixin, BaseModel): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String, unique=True) email = db.Column(db.String, unique=True) password = db.Column(db.String, nullable=False) roles = db.Column(db.String, nullable=False) is_superuser = db.Column(db.Boolean, default=False) is_confirmed = db.Column(db.Boolean, nullable=False, default=False) registered_time = db.Column(db.DateTime, default=datetime.utcnow(), nullable=False)