class Article(db.Model): __tablename__ = "article" author = db.Column(db.String(36), index=True) articleID = db.Column(db.String(36), primary_key=True, index=True) title = db.Column(db.String(40), index=True) context = db.Column(db.TEXT) tag = db.Column( db.Enum("event", "entertainment", "science", "life", "trip")) status = db.Column(db.Enum("published", "draft")) time = db.Column(db.DateTime) read = db.Column(db.Integer) def __repr__(self): return '<Title %r Content %r>' % (self.title, self.context)
class GeneralUser(db.Model): __tablename__ = 'generalUser' userID = db.Column(db.String(36), primary_key=True) #主键 userName = db.Column(db.String(10), index=True) registerTime = db.Column(db.DateTime) #注册时间 email = db.Column(db.String(120)) #电子邮件 password = db.Column(db.String(20)) #密码 realName = db.Column(db.String(10)) #真实姓名 gender = db.Column(db.Enum("男", "女")) #性别 birthday = db.Column(db.Date) #生日 describe = db.Column(db.String(100)) #个人签名 #对于一个一对多的关系,db.relationship 字段通常是定义在“一”这一边。 #在这种关系下,我们得到一个 user.posts 成员,它给出一个用户所有的 blog。 #posts = db.relationship('Post', backref='author', lazy='dynamic') @property def is_authenticated(self): #属性,判断是否已经授权 return True @property def is_active(self): #属性,判断用户是否已被激活 return True @property def is_anonymous(self): #属性,判断是否是匿名用户 return False def get_id(self): #方法,返回用户唯一标识 return str(self.userID) #__repr__方法告诉Python如何打印这个类的对象,用来调试 def __repr__(self): return '<GeneralUser %r>' % (self.userName)
class BaseModel(db.Model): __abstract__ = True id = db.Column(db.Integer, primary_key=True) created_time = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp()) updated_time = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), server_onupdate=db.func.current_timestamp()) status = db.Column(db.Enum(Status), default=Status.VALID) def save(self): db.session.add(self) db.session.commit()
class SiteConfig(BaseModel, db.Model): """站点配置""" __tablename__ = "mogu_site_config" id = db.Column(db.Integer, primary_key=True, comment="ID") title = db.Column(db.String(80), comment="提示文本") name = db.Column(db.String(500), nullable=True, comment="变量名") value = db.Column(db.String(500), nullable=True, comment="变量值") dtype = db.Column(db.Enum("text", "image", "link", "video"), default="text", comment="变量类型") def __repr__(self): return "%s[%s]=%s" % (self.title, self.name, self.value)
class Users(BaseModel, db.Model): """用户模型""" __tablename__ = 'tb_users' id = db.Column(db.Integer, primary_key=True) # 用户编号 nick_name = db.Column(db.String(32), unique=True, nullable=False) # 用户昵称 password_hash = db.Column(db.String(128), nullable=False) # 用户密码 mobile = db.Column(db.String(11), unique=True, nullable=False) # 手机号 avatar_url = db.Column(db.String(256)) # 头像路径 last_login = db.Column(db.DateTime, default=datetime.now()) # 最后一次登录时间 signature = db.Column(db.String(512)) # 用户签名 gender = db.Column( # 用户性别 db.Enum('MAN', 'WOMAN')) tasks = db.relationship("Tasks", backref='user', lazy="dynamic") @property def password(self): raise AttributeError("当前属性不可读") @password.setter def password(self, value): self.password_hash = generate_password_hash(value) def check_password(self, password): """ 校验用户名和密码是否正确 :param password: 接受用户输入的密码明文 :return: 返回校验结果, True or False """ return check_password_hash(self.password_hash, password) def to_dict(self): resp_dict = { "id": self.id, "nick_name": self.nick_name, "avatar_url": constants.QINIU_DOMIN_PREFIX + self.avatar_url if self.avatar_url else "", "mobile": self.mobile, "gender": self.gender if self.gender else "MAN", "signature": self.signature if self.signature else "", # "tasks": self.tasks.title } return resp_dict
class User(db.Model): __table_name__ = "user" __table_args__ = (PrimaryKeyConstraint('Host', 'User'), ) Host = db.Column(db.String(60), nullable=False) User = db.Column(db.String(32), nullable=False) Select_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Insert_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Update_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Delete_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Create_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Drop_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Reload_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Shutdown_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Process_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') File_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Grant_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') References_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Index_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Alter_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Show_db_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Super_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Create_tmp_table_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Lock_tables_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Execute_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Repl_slave_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Repl_client_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Create_view_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Show_view_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Create_routine_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Alter_routine_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Create_user_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Event_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Trigger_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') Create_tablespace_priv = db.Column(db.Enum('N', 'Y'), nullable=False, default='N') password_expired = db.Column(db.Enum('N', 'Y'), nullable=False, default='N')
class User(BaseModel, db.Model): """用户""" __tablename__ = "info_user" id = db.Column(db.Integer, primary_key=True) # 用户编号 nick_name = db.Column(db.String(32), unique=True, nullable=False) # 用户昵称 password_hash = db.Column(db.String(128), nullable=False) # 加密的密码 mobile = db.Column(db.String(11), unique=True, nullable=False) # 手机号 avatar_url = db.Column(db.String(256)) # 用户头像路径 last_login = db.Column(db.DateTime, default=datetime.now) # 最后一次登录时间 is_admin = db.Column(db.Boolean, default=False) signature = db.Column(db.String(512)) # 用户签名 gender = db.Column( # 订单的状态 db.Enum( "MAN", # 男 "WOMAN" # 女 ), default="MAN") # 当前用户收藏的所有新闻 collection_news = db.relationship("News", secondary=tb_user_collection, lazy="dynamic") # 用户收藏的新闻 # 用户所有的粉丝,添加了反向引用followed,代表用户都关注了哪些人 followers = db.relationship( 'User', secondary=tb_user_follows, primaryjoin=id == tb_user_follows.c.followed_id, secondaryjoin=id == tb_user_follows.c.follower_id, backref=db.backref('followed', lazy='dynamic'), lazy='dynamic') # 当前用户所发布的新闻 news_list = db.relationship('News', backref='user', lazy='dynamic') @property def password(self): raise AttributeError("当前属性不可读") @password.setter def password(self, value): self.password_hash = generate_password_hash(value) def check_password(self, password): return check_password_hash(self.password_hash, password) def to_dict(self): resp_dict = { "id": self.id, "nick_name": self.nick_name, "avatar_url": constants.QINIU_DOMIN_PREFIX + self.avatar_url if self.avatar_url else "", "mobile": self.mobile, "gender": self.gender if self.gender else "MAN", "signature": self.signature if self.signature else "", "followers_count": self.followers.count(), "news_count": self.news_list.count() } return resp_dict def to_admin_dict(self): resp_dict = { "id": self.id, "nick_name": self.nick_name, "mobile": self.mobile, "register": self.create_time.strftime("%Y-%m-%d %H:%M:%S"), "last_login": self.last_login.strftime("%Y-%m-%d %H:%M:%S"), } return resp_dict