Exemplo n.º 1
0
class ItemModel(db.Model):
    __tablename__ = "items"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False, unique=True)
    price = db.Column(db.Float(precision=2), nullable=False)

    store_id = db.Column(db.Integer, db.ForeignKey(
        "stores.id"), nullable=False)
    store = db.relationship("StoreModel")

    @classmethod
    def find_by_name(cls, name: str) -> "ItemModel":
        return cls.query.filter_by(name=name).first()

    @classmethod
    def find_all(cls) -> List["ItemModel"]:
        return cls.query.all()

    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()
Exemplo n.º 2
0
class Weibo(db.Model):
    __tablename__ = 'weibo'

    id = db.Column(db.Integer, primary_key=True)
    uid = db.Column(db.Integer, nullable=False)
    content = db.Column(db.Text)
    created = db.Column(db.DateTime, default=datetime.datetime.now())
    n_zan = db.Column(db.Integer, default=0)
Exemplo n.º 3
0
class Follow(db.Model):
    '''关注表'''
    __tablename__ = 'follow'

    uid = db.Column(db.Integer, primary_key=True)  # 关注者的 UID
    fid = db.Column(db.Integer, primary_key=True)  # 被关注者的 UID

    @classmethod
    def is_followed(cls, uid, fid):
        '''检查是否关注过对方'''
        query_result = cls.query.filter_by(uid=uid, fid=fid).exists()
        return db.session.query(query_result).scalar()
Exemplo n.º 4
0
class Like(db.Model):
    ''''点赞表'''
    __tablename__ = 'like'

    uid = db.Column(db.Integer, primary_key=True)
    wid = db.Column(db.Integer, primary_key=True)

    @classmethod
    def is_liked(cls, uid, wid):
        '''检查是否已存在赞'''
        base_query = Like.query.filter_by(uid=uid, wid=wid).exists()
        return db.session.query(base_query).scalar()
Exemplo n.º 5
0
class Weibo(db.Model):
    #表的名字
    __tablename__ = 'weibo'

    #表的结构
    id = db.Column(db.Integer, primary_key=True)  #主键
    uid = db.Column(db.Integer, nullable=False)  #不可空类型
    content = db.Column(db.Text)  #内容为文本类型
    created = db.Column(db.DateTime, default=datetime.now)  #发布时间
    updated = db.Column(db.DateTime,
                        default=datetime.now,
                        onupdate=datetime.now)  #更新时间为当前时间
Exemplo n.º 6
0
class Profile(db.Model):
    __tablename__ = 'profile'

    id = db.Column(db.Integer, primary_key=True) 
    location = db.Column(ChoiceType(genders))
    min_distance = db.Column(db.Integer)
    max_distance = db.Column(db.Integer)
    min_dating_age = db.Column(db.Integer)
    max_dating_age = db.Column(db.Integer)
    dating_sex = db.Column(ChoiceType(locations))
    vibration = db.Column(db.Boolean())
    only_matche = db.Column(db.Boolean())
    auto_play = db.Column(db.Boolean())
Exemplo n.º 7
0
class TokenBlacklist(db.Model):
    __tablename__ = 'blacklist'
    id = db.Column(db.Integer, primary_key=True)
    jti = db.Column(db.String(120))

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

    @classmethod
    def is_jti_blacklisted(cls, jti):
        query = cls.query.filter_by(jti=jti).first()
        return bool(query)
Exemplo n.º 8
0
class UserModel(db.Model):
    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), nullable=False, unique=True)
    email = db.Column(db.String(255), nullable=False, unique=True)
    password = db.Column(db.String(128), nullable=False)

    activation = db.relationship("ActivationModel",
                                 lazy="dynamic",
                                 cascade="all, delete-orphan")

    @property
    def most_recent_activation(self) -> "ActivationModel":
        return self.activation.order_by(db.desc(
            ActivationModel.expire_at)).first()

    @classmethod
    def find_by_username(cls, username: str) -> "UserModel":
        return cls.query.filter_by(username=username).first()

    @classmethod
    def find_by_email(cls, email: str) -> "UserModel":
        return cls.query.filter_by(email=email).first()

    @classmethod
    def find_by_id(cls, _id: int) -> "UserModel":
        return cls.query.filter_by(id=_id).first()

    def send_confirmation_email(self) -> Response:
        link = request.url_root[:-1] + url_for(
            "activation", activation_id=self.most_recent_activation.id)
        subject = "Registration activation"
        text = f"Please click the link to activate your registration: {link}"
        html = f'<html>Please click the link to activate your registration: <a href="{link}">Activation Link</a></html>'

        return Mailgun.send_email(self.email, subject, text, html)

    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()

    def verify_password(self, password: str) -> bool:
        return bc.check_password_hash(self.password, password)
Exemplo n.º 9
0
class User(db.Model):
    __tablename__ = 'user'

    id =  db.Column(db.Integer,primary_key=True)
    nickname = db.Column(db.String(20),unique=True,nullable=False,index=True)
    password = db.Column(db.String(128),nullable=True)
    gender  = db.Column(db.String(10),default='unknow')
    bio = db.Column(db.String(200))
    city = db.Column(db.String(16),default='上海')
    avatar = db.Column(db.String(128))
    birthday = db.Column(db.Date,default='1997-01-11')
    created = db.Column(db.DATETIME)
Exemplo n.º 10
0
class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 用户 ID
    nickname = db.Column(db.String(32), unique=True)  # 昵称
    password = db.Column(db.String(128))  # 用户的安全密码
    gender = db.Column(db.String(16))  # 性别
    city = db.Column(db.String(16))  # 城市
    avatar = db.Column(db.String(128))  # 头像地址
    birthday = db.Column(db.Date, default='2000-01-01')  # 生日
    bio = db.Column(db.Text())  # 个人简介
Exemplo n.º 11
0
class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    nickname = db.Column(db.String(32), unique=True)
    password = db.Column(db.String(128))
    gender = db.Column(db.String(16))
    city = db.Column(db.String(16))
    avatar = db.Column(db.String(128))
    birthday = db.Column(db.Date, default='2000-01-01')
    bio = db.Column(db.Text())
Exemplo n.º 12
0
class User(db.Model):
    '''用户表'''
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)  #id
    nickname = db.Column(db.String(20),
                         unique=True,
                         nullable=False,
                         index=True)  #昵称
    password = db.Column(db.String(128), nullable=True)  #密码
    gender = db.Column(db.String(10), default='unknow')  #性别
    bio = db.Column(db.String(200))  #经历
    city = db.Column(db.String(16), default='上海')  #所在城市
    avatar = db.Column(db.String(128))  #头像
    birthday = db.Column(db.Date, default='1990-01-01')  #生日
    created = db.Column(db.DateTime)  #创建时间
Exemplo n.º 13
0
class User(db.Model):
    '''用户表'''
    __tablename__ = 'user'  #定义表名

    id = db.Column(db.Integer, primary_key=True)  #主关键字
    nickname = db.Column(db.String(20),
                         unique=True,
                         nullable=False,
                         index=True)  #唯一的,不能为空,索引
    password = db.Column(db.String(128), Tnullable=False)  #不能为空
    gender = db.Column(db.String(10), default='unknow')  #默认值
    bio = db.Column(db.String(200))
    city = db.Column(db.String(16), default='上海')  #默认是上海
    avater = db.Column(db.String(128))
    birthday = db.Column(db.Date, default='1990-01-01')
    #创建日期
    created = db.Column(db.DateTime)
Exemplo n.º 14
0
class Comment(db.Model):
    '''评论表'''
    __tablename__ = 'comment'

    id = db.Column(db.Integer, primary_key=True)
    uid = db.Column(db.Integer, nullable=False)  # 评论的作者ID
    wid = db.Column(db.Integer, nullable=False)  # 被评论的微博的ID
    cid = db.Column(db.Integer, nullable=False, default=0)  # 回复的评论的ID
    rid = db.Column(db.Integer, nullable=False, default=0)  # 回复的回复的ID
    content = db.Column(db.Text)
    created = db.Column(db.DateTime, default=datetime.now)
Exemplo n.º 15
0
class User(db.Model):
    
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), unique=True, index=True)
    phone = db.Column(db.String(50))
    avatar = db.Column(db.String(100))
    gender = db.Column(ChoiceType(genders))
    location = db.Column(ChoiceType(locations))
    birthday = db.Column(db.Date,default='2000-01-01')
Exemplo n.º 16
0
class StoreModel(db.Model):
    __tablename__ = "stores"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False, unique=True)

    items = db.relationship("ItemModel", lazy="dynamic", viewonly=True)

    @classmethod
    def find_by_name(cls, name: str) -> "StoreModel":
        return cls.query.filter_by(name=name).first()

    @classmethod
    def find_all(cls) -> List["StoreModel"]:
        return cls.query.all()

    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()
Exemplo n.º 17
0
class ActivationModel(db.Model):
    __tablename__ = "activations"

    id = db.Column(db.String(50), primary_key=True)
    expire_at = db.Column(db.Integer, nullable=False)
    activated = db.Column(db.Boolean, nullable=False)

    user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
    user = db.relationship("UserModel", viewonly=True)

    def __init__(self, user_id: int, **kwargs):
        super().__init__(**kwargs)
        self.user_id = user_id
        self.id = uuid4().hex
        self.expire_at = int(time()) + ACTIVATION_EXPIRATION_DELTA
        self.activated = False

    @classmethod
    def find_by_id(cls, _id: str) -> "ActivationModel":
        return cls.query.filter_by(id=_id).first()

    @property
    def expired(self) -> bool:
        return time() > self.expire_at

    def force_to_expire(self) -> None:
        if not self.expired:
            self.expire_at = int(time())
            self.save_to_db()

    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()
Exemplo n.º 18
0
class Weibo(db.Model):
    __tablename__ = 'weibo'

    id = db.Column(db.Integer, primary_key=True)
    uid = db.Column(db.Integer, nullable=False)
    content = db.Column(db.Text)
    created = db.Column(db.DateTime, default=datetime.now)  # 发布时间
    updated = db.Column(db.DateTime,
                        default=datetime.now,
                        onupdate=datetime.now)  # 最后修改的时间
    n_like = db.Column(db.Integer, default=0)  # 当前微博的点赞数量
Exemplo n.º 19
0
class Weibo(db.Model):
    __tablename__ = 'weibo'
    # 作者和微博的关系  一对多关系   不一定使用外键  只是约束关系
    #外键的缺点:慢  效率低  对于大型数据  在查询的时候  A链接B  会关联性的扫描
    #数据库中有自带索引的
    id = db.Column(db.Integer, primary_key=True)
    uid = db.Column(db.Integer, nullable=False)  #用户id
    # show databases;   use weibo;  show tables;  show indexes in user; show  indexes in user \G;
    # 加索引的情况  Btree(二三树(更具效率)B父节点保存数据   B+树  没有父节点数据 由子节点关联在一起)  二叉树 (父节点  两条线)
    content = db.Column(db.Text)  #创建时间
    created = db.Column(db.DateTime, default=datetime.now)  # 发布时间
    updated = db.Column(db.DateTime,
                        default=datetime.now,
                        onupdate=datetime.now)  # 最后修改的时间
    n_like = db.Column(db.Integer, default=0)  # 当前微博的点赞数量
Exemplo n.º 20
0
class Weibo(db.Model):
    '''微博表'''
    __tablename__ = 'weibo'

    id = db.Column(db.Integer, primary_key=True)  # 微博ID
    uid = db.Column(db.Integer)  # 对应的用户 ID
    content = db.Column(db.Text)  # 微博内容
    created = db.Column(db.DateTime)  # 微博创建时间
    updated = db.Column(db.DateTime)  # 微博修改时间

    n_like = db.Column(db.Integer, default=0)  # 冗余字段: 当前微博的点赞数

    @property
    def user(self):
        '''当前微博作者'''
        if not hasattr(self, '_user'):
            self._user = User.query.get(self.uid)
        return self._user
Exemplo n.º 21
0
class Weibo(db.Model):
    '''微博表'''
    __tablename__ = 'weibo'

    id = db.Column(db.Integer, primary_key=True)
    uid = db.Column(db.Integer)
    content = db.Column(db.Text)
    created = db.Column(db.DateTime)
    updated = db.Column(db.DateTime)

    # 点赞数
    n_like = db.Column(db.Integer, default=0)

    @property  # 外键==》property!!!!!!!
    def user(self):
        '''当前微博作者'''
        if not hasattr(self, '_user'):
            self._user = User.query.get(self.uid)
        return self._user
Exemplo n.º 22
0
class Comment(db.Model):
    __tablename__ = 'comment'

    id = db.Column(db.Integer, primary_key=True)

    uid = db.Column(db.Integer)  # 用户 ID
    wid = db.Column(db.Integer)  # 微博 ID
    cid = db.Column(db.Integer)  # 评论 ID

    content = db.Column(db.Text)  # 评论内容
    created = db.Column(db.DateTime)  # 评论时间

    @property
    def user(self):
        '''当前评论的作者'''
        if not hasattr(self, '_user'):
            self._user = User.query.get(self.uid)
        return self._user

    @property
    def weibo(self):
        '''当前评论的微博'''
        if not hasattr(self, '_weibo'):
            self._weibo = Weibo.query.get(self.wid)
        return self._weibo

    @property
    def reply_comment(self):
        '''当前回复的评论'''
        if self.cid == 0:
            return None

        elif not hasattr(self, '_reply_comment'):
            self._reply_comment = Comment.query.get(self.cid)

        return self._reply_comment
Exemplo n.º 23
0
class Like(db.Model):
    __tablename__ = 'like'

    uid = db.Column(db.Integer, primary_key=True)
    wid = db.Column(db.Integer, primary_key=True)
Exemplo n.º 24
0
class UserModel(db.Model):
    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(10), nullable=False)
    password = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(256), nullable=False, unique=True)

    country = db.Column(db.String(50), nullable=False)
    phone_number = db.Column(db.String(30), nullable=False)
    state = db.Column(db.String(50), nullable=False)
    city = db.Column(db.String(50), nullable=False)

    confirmed = db.relationship("UserConfirmationModel",
                                lazy="dynamic",
                                cascade="all, delete-orphan")

    async def init(self, username, password, email, country: str, phone_number,
                   state, city, *args):
        self.username = username
        self.password = psw.generate_password_hash(password).decode('utf8')
        self.email = email
        self.country = await Country.get_country_name(Country, country)
        self.region = await Country.get_country_region(Country)
        self.phone_number = await Country.get_user_phonenumber(
            Country, phone_number)
        self.state = await Country.get_states(Country, state)
        self.city = await Country.get_city(Country, city)

    @property
    def recent_confirmation(self) -> "UserConfirmationModel":
        return self.confirmed.order_by(
            db.desc(UserConfirmationModel.token_expires_at)).first()

    @classmethod
    async def find_user_by_id(cls, id) -> "UserModel":
        return cls.query.filter(cls.id == id).first()

    @classmethod
    async def find_user_by_email(cls, email):
        return cls.query.filter(cls.email == email).first()

    @classmethod
    async def find_user_by_name(cls, name):
        return cls.query.filter(cls.username == name).first()

    async def save_to_db(self):
        db.session.add(self)
        db.session.commit()

    async def send_email(self):
        subject = "Registration Confirmation"
        link = request.url_root[:-1] + url_for(
            "user_confirm.user_confirm") + "/" + str(
                self.recent_confirmation.confirmation_id)
        text = f"Please click the link to confirm your registration:{link}"
        html = f"<html>Click the link to confirm your registration:<a href={link}>Confirmation Token</a></html>"
        return await Mailgun.send_email([self.email], subject, text,
                                        html), "Done Here"

    async def delete_from_db(self):
        db.session.delete(self)
        db.session.commit()

    def __repr__(self):
        return f"{self.id, self.username, self.email, self.password}"
Exemplo n.º 25
0
class Zan(db.Model):
    __tablename__ = 'zan'

    uid = db.Column(db.Integer, primary_key=True)
    wid = db.Column(db.Integer, primary_key=True)
Exemplo n.º 26
0
class Follow(db.Model):
    '''关注表'''
    __tablename__ = 'follow'

    uid = db.Column(db.Integer, primary_key=True)
    fid = db.Column(db.Integer, primary_key=True)