示例#1
0
class Category(db.Model):
    __tablename__ = "categories"
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(50), nullable=False)

    def save(self):
        db.session.add(self)
        db.session.commit()
        return self

    def delete(self):
        db.session.delete(self)
        db.session.commit()
示例#2
0
文件: models.py 项目: highsoul/dky
class Message(db.Model):
    __tablename__ = "messages"
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    user = db.relationship("User",
                           backref=db.backref("messages", lazy='dynamic'),
                           lazy='joined')
    content = db.Column(db.String(50), nullable=False)

    def save(self):
        db.session.add(self)
        db.session.commit()
        return self

    def delete(self):
        db.session.delete(self)
        db.session.commit()
示例#3
0
class Like(db.Model):
    __tablename__ = "like"
    id = db.Column(db.Integer(), primary_key=True)

    user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    user = db.relationship("User",
                           backref=db.backref("likes", lazy='dynamic'),
                           lazy='joined')

    activity_id = db.Column(db.Integer, db.ForeignKey("activities.id"))
    activity = db.relationship("Activity",
                               backref=db.backref("likes", lazy='dynamic'),
                               lazy='joined')

    def save(self):
        db.session.add(self)
        db.session.commit()
        return self

    def delete(self):
        db.session.delete(self)
        db.session.commit()
示例#4
0
文件: models.py 项目: highsoul/dky
class Activity(db.Model):

    __tablename__ = "activities"

    id = db.Column(db.Integer(), primary_key=True)
    created_at = db.Column(db.DateTime,
                           default=datetime.datetime.now(),
                           nullable=False)
    updated_at = db.Column(db.DateTime,
                           onupdate=datetime.datetime.now(),
                           nullable=True)

    start_time = db.Column(db.DateTime, nullable=False)
    end_time = db.Column(db.DateTime, nullable=False)

    address = db.Column(db.String(200), nullable=False)

    title = db.Column(db.String(100), nullable=False)
    count = db.Column(db.Integer(), default=20, nullable=False)
    content = db.Column(db.String(255), nullable=True)

    user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    user = db.relationship("User",
                           backref=db.backref("c_activities", lazy='dynamic'),
                           lazy='joined')

    group_id = db.Column(db.Integer, db.ForeignKey("groups.id"))
    group = db.relationship("Group",
                            backref=db.backref("activities", lazy='dynamic'),
                            lazy='joined')

    users = db.relationship("User",
                            secondary=activity_users,
                            backref=db.backref("activities", lazy='dynamic'),
                            lazy='dynamic')

    likes = db.relationship("User",
                            secondary=activity_like,
                            backref=db.backref("likes", lazy='dynamic'),
                            lazy='dynamic')

    def save(self):
        db.session.add(self)
        db.session.commit()
        return self

    def delete(self):

        db.session.delete(self)
        db.session.commit()

    def print_start_time(self):
        return self.start_time.strftime('%Y-%m-%d %H:%M')

    def print_end_time(self):
        return self.end_time.strftime('%Y-%m-%d %H:%M')
示例#5
0
文件: models.py 项目: highsoul/dky
class Group(db.Model):

    __tablename__ = "groups"

    id = db.Column(db.Integer(), primary_key=True)
    created_at = db.Column(db.DateTime,
                           default=datetime.datetime.now(),
                           nullable=False)
    updated_at = db.Column(db.DateTime,
                           onupdate=datetime.datetime.now(),
                           nullable=True)

    active = db.Column(db.Boolean, default=False, nullable=False)

    name = db.Column(db.String(40), unique=True, nullable=False)
    description = db.Column(db.String(200), nullable=True)
    logo = db.Column(db.String(200), nullable=False)
    #banner = db.Column(db.String(200), nullable=False)
    set_logo = db.Column(db.Boolean, default=False, nullable=False)

    category_id = db.Column(db.Integer, db.ForeignKey("categories.id"))
    category = db.relationship("Category",
                               backref=db.backref("groups", lazy='dynamic'),
                               lazy='joined')

    creator_id = db.Column(db.Integer(), db.ForeignKey('users.id'))
    creator = db.relationship("User",
                              backref=db.backref('owned_group',
                                                 uselist=False,
                                                 lazy='joined'),
                              lazy='joined')

    members = db.relationship(
        "User",
        secondary=groups_members,
        primaryjoin=id == groups_members.c.group_id,
        secondaryjoin=
        "and_(groups_members.c.user_id == User.id, groups_members.c.verify==True)",
        backref=db.backref("groups", lazy='dynamic'),
        lazy='dynamic')
    unverify_members = db.relationship(
        "User",
        secondary=groups_members,
        primaryjoin=id == groups_members.c.group_id,
        secondaryjoin=
        "and_(groups_members.c.user_id == User.id, groups_members.c.verify==False)",
        lazy='dynamic')
    """ 设置随机小组图标 """
    def set_logo_auto(self):
        files = [
            x for x in os.listdir(DefaultConfig.LOCAL_GROUPLOGO_DIR)
            if os.path.isfile(
                os.path.join(DefaultConfig.LOCAL_GROUPLOGO_DIR, x))
        ]
        self.logo = random.choice(files)

    """ 创建小组 """

    def save(self):
        db.session.add(self)
        db.session.commit()
        return self

    """加入成员"""

    def join(self, user_id):
        u = update(groups_members).where(
            groups_members.c.group_id == self.id).where(
                groups_members.c.user_id == user_id).values(verify=True)
        engine = create_engine(DefaultConfig.SQLALCHEMY_DATABASE_URI)
        connection = engine.connect()
        connection.execute(u)
        connection.close()

    """删除成员"""

    def delete(self, user_id):
        groups_members.delete(groups_members.c.group_id == self.id,
                              groups_members.c.user_id == user_id)

    """ 序列化 """

    @property
    def serialize(self):
        return {'id': self.id, 'private': self.private, 'name': self.name}
示例#6
0
from zoo.extensions import db
import datetime

groups_members = db.Table(
    'groups_members',
    db.Column('user_id', db.Integer(), db.ForeignKey('users.id')),
    db.Column('group_id', db.Integer(), db.ForeignKey('groups.id')),
    db.Column('verify', db.Boolean, default=False, nullable=False))

user_followers = db.Table(
    'followers',
    db.Column('follower_id', db.Integer(), db.ForeignKey('users.id')),
    db.Column('followed_id', db.Integer(), db.ForeignKey('users.id')))

activity_users = db.Table(
    'activity_users',
    db.Column('activity_id', db.Integer(), db.ForeignKey('activities.id')),
    db.Column('user_id', db.Integer(), db.ForeignKey('users.id')))

activity_like = db.Table(
    'likes',
    db.Column('activity_id', db.Integer(), db.ForeignKey('activities.id')),
    db.Column('user_id', db.Integer(), db.ForeignKey('users.id')))
示例#7
0
class User(db.Model, UserMixin):

    __tablename__ = "users"

    id = db.Column(db.Integer(), primary_key=True)
    created_at = db.Column(db.DateTime,
                           default=datetime.datetime.now(),
                           nullable=False)
    updated_at = db.Column(db.DateTime,
                           onupdate=datetime.datetime.now(),
                           nullable=True)

    username = db.Column(db.String(32), unique=True, nullable=False)
    email = db.Column(db.String(200), unique=True, nullable=False)
    avatar = db.Column(db.String(200), nullable=False)
    set_avatar = db.Column(db.Boolean, default=False, nullable=False)
    #description = db.Column(db.String(255),nullable=True)
    _password = db.Column('password', db.String(160), nullable=False)

    role = db.Column(db.Integer(), default=3, nullable=False)

    new_followers = db.Column(db.Integer(), default=0, nullable=False)
    last_check_follower = db.Column(db.DateTime,
                                    default=datetime.datetime.now(),
                                    nullable=False)
    followed = db.relationship(
        'User',
        secondary=user_followers,
        primaryjoin=(id == user_followers.c.follower_id),
        secondaryjoin=(id == user_followers.c.followed_id),
        backref=db.backref('followers', lazy='dynamic'),
        lazy='dynamic')

    rank = db.Column(db.Integer(), default=0)

    @hybrid_property
    def password(self):
        return self._password

    @password.setter
    def password(self, password):
        if not password:
            return
        self._password = generate_password_hash(password)

    def check_password(self, password):
        if self.password is None:
            return False
        return check_password_hash(self.password, password)

    """ 随机获得系统头像 """

    def set_avatar_auto(self):
        files = [
            x for x in os.listdir(DefaultConfig.LOCAL_AVATAR_DIR)
            if os.path.isfile(os.path.join(DefaultConfig.LOCAL_AVATAR_DIR, x))
        ]
        self.avatar = random.choice(files)

    @classmethod
    def authenticate(cls, login, password, role):
        user = cls.query.filter(
            db.or_(User.username == login, User.email == login)).first()
        if user:
            authenticated = user.check_password(password)
        else:
            authenticated = False
        return user, authenticated

    """ 创建用户 """

    def save(self):
        db.session.add(self)
        db.session.commit()
        return self

    """ 获得用户小组"""

    def get_groups(self):
        return self.groups.all()

    """ 关注用户 """

    def follow(self, user):
        if not self.is_following(user):
            self.followed.append(user)
            user.new_followers += 1
            user.save()
            return self

    """ 取消关注用户 """

    def unfollow(self, user):
        if self.is_following(user):
            link = db.session.query(user_followers).filter(
                user_followers.c.followed_id == user.id,
                user_followers.c.follower_id == self.id).one()
            print(link.created_at)
            #判断是否为新增粉丝,如果是则用户新增粉丝数-1
            if link.created_at > user.last_check_follower:
                user.new_followers -= 1
            self.followed.remove(user)
            user.save()
            return self

    """ 是否关注用户 """

    def is_following(self, user):
        return self.followed.filter(
            user_followers.c.followed_id == user.id).count() > 0

# """ 获取用户所有消息 """
# def get_messages(self):
#     messages = self.messages.all()
#     return messages

# """ 获取未阅读消息分类片段(用于页头消息提醒显示) """
# def get_brief_messages(self):
#     messages = self.messages.filter(Message.readed == False).all()
#     return messages

    """ 检查粉丝 """
    def check_follower(self):
        self.last_check_follower = datetime.datetime.now()
        self.new_followers = 0
        self.save()