示例#1
0
class User(db.Model):

    id = db.Column(db.Integer, primary_key=True, autoincrement=True, index=True)
    username = db.Column(db.String(10), unique=True)
    phone = db.Column(db.String(30), default="无")
    email = db.Column(db.String(30), default="无")
    country = db.Column(db.String(10), default="中国")
    area = db.Column(db.String(10), default="北京")
    key = db.Column(db.String(16))
    create_at = db.Column(db.DateTime)
    updated_at = db.Column(db.DateTime)

    messages = db.relationship('Message', back_populates='author', cascade='all')

    rooms = db.relationship('Room', back_populates='users', secondary=assist_table)

    @classmethod
    def create_user(cls):
        user = cls()
        db.session.add(user)
        db.session.commit()
        user.username = '******' + str(user.id)
        generate_avatar(user.username, 'chatroom/static/avatars/user/{}.png'.format(user.id))
        db.session.commit()
        return user

    def is_master(self, room):
        if room.master_id == self.id:
            return True
        else:
            return False

    def join_room(self, key, name):
        room = Room.query.filter_by(key=key).filter_by(name=name).first()
        if room is None or room in self.rooms:
            return None
        self.rooms.append(room)
        db.session.commit()
        return room

    def send_message(self, type_, content, room):
        new_message = Message(type_, content)
        room.messages.append(new_message)
        self.messages.append(new_message)
        db.session.add(new_message)
        db.session.commit()
        return new_message

    def __init__(self):
        # generate a 16-length random string as token key
        self.key = "".join(random.choice(string.ascii_letters + string.digits) for i in range(16))
        self.create_at = datetime.utcnow()
        self.updated_at = self.create_at
示例#2
0
class Message(db.Model):
    id = db.Column(db.String(36), primary_key=True, index=True)
    content = db.Column(db.Text, index=True)
    timestamp = db.Column(db.DateTime)
    updated = db.Column(db.DateTime, default=datetime.utcnow())
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'), index=True)
    room_id = db.Column(db.String(36), db.ForeignKey('room.id'), index=True)
    author = db.relationship('User', back_populates='messages')
    room = db.relationship('Room', back_populates='messages')

    def __init__(self, content, author_id, room_id):
        self.id = str(uuid1())
        self.content = content
        self.author_id = author_id
        self.room_id = room_id
        self.timestamp = datetime.utcnow()
示例#3
0
class Message(db.Model):

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    type = db.Column(db.Enum('text', 'picture', 'file'))
    content = db.Column(db.String(300))
    create_at = db.Column(db.DateTime)
    updated_at = db.Column(db.DateTime)

    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    author = db.relationship('User', back_populates='messages')

    room_id = db.Column(db.Integer, db.ForeignKey('room.id'))
    room = db.relationship('Room', back_populates='messages')

    def __init__(self, type_, content):
        self.type = type_
        self.content = content
        self.create_at = datetime.utcnow()
        self.updated_at = self.create_at
示例#4
0
class Room(db.Model):
    id = db.Column(db.String(36), primary_key=True, index=True)
    name = db.Column(db.String(20), unique=True, index=True)
    introduce = db.Column(db.Text)
    timestamp = db.Column(db.DateTime)
    updated = db.Column(db.DateTime, default=datetime.utcnow())
    messages = db.relationship('Message', back_populates='room', cascade='all')
    owner_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    owner = db.relationship('User', back_populates='rooms_owned')
    users = db.relationship('User',
                            secondary=assist_table,
                            back_populates='rooms')
    avatar = 1

    def set_avatar(self, file):
        pass

    def __init__(self, name, introduce=None):
        self.id = str(uuid1())
        self.name = name
        if introduce is None:
            self.introduce = ' '
        else:
            self.introduce = introduce
示例#5
0
class User(db.Model):
    id = db.Column(db.Integer,
                   primary_key=True,
                   autoincrement=True,
                   index=True)
    username = db.Column(db.String(10), unique=True, index=True)
    register_at = db.Column(db.DateTime, default=datetime.utcnow())
    updated = db.Column(db.DateTime, default=datetime.utcnow())
    password_hash = db.Column(db.String(128))
    phone = db.Column(db.String(30), unique=True)  # 添加短信验证和格式验证
    messages = db.relationship('Message',
                               back_populates='author',
                               cascade='all')
    rooms_owned = db.relationship('Room',
                                  back_populates='owner',
                                  cascade='all')  # 若拥有聊天室则不能删除用户
    avatar = 1
    rooms = db.relationship('Room',
                            secondary=assist_table,
                            back_populates='users')

    def set_avatar(self, file):
        pass

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

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

    def __init__(self, username, password, phone):
        self.username = username
        self.set_password(password)
        # if validate_phone(phone):
        #     self.phone = phone
        self.phone = phone
示例#6
0
class Room(db.Model):

    id = db.Column(db.Integer, primary_key=True, autoincrement=True, index=True)
    name = db.Column(db.String(10), unique=True, index=True)
    introduce = db.Column(db.String(100))
    topic = db.Column(db.String(100))
    key = db.Column(db.String(20))
    create_at = db.Column(db.DateTime)
    updated_at = db.Column(db.DateTime)
    master_id = db.Column(db.Integer)

    messages = db.relationship('Message', back_populates='room', cascade='all')

    users = db.relationship('User', back_populates='rooms', secondary=assist_table)

    @classmethod  # move to User's method
    def create_room(cls, name=None, introduce="无", key="123456", topic="无"):
        room = cls()
        db.session.add(room)
        db.session.commit()
        if name is None:
            room.name = 'room' + str(room.id)
        else:
            room.name = name
        room.introduce = introduce
        room.key = key
        room.topic = topic
        room.master_id = g.user.id
        g.user.rooms.append(room)
        generate_avatar(room.name, 'chatroom/static/avatars/room/{}.png'.format(room.id))
        db.session.commit()
        return room

    def __init__(self):
        self.create_at = datetime.utcnow()
        self.updated_at = self.create_at