class Posts(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True, autoincrement=True) rid = db.Column(db.Integer, index=True, default=0) content = db.Column(db.Text) pub_time = db.Column(db.DateTime, default=datetime.utcnow) uid = db.Column(db.Integer, db.ForeignKey('users.id')) author = db.relationship('User', backref="postes")
class Preview(db.Model): __tablename__ = 'preview' id = db.Column(db.Integer, primary_key=True) # 编号 title = db.Column(db.String(255), unique=True) # 标题 logo = db.Column(db.String(255), unique=True) # 封面 add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __str__(self): return '<Preview> %r' % self.title
class Tag(db.Model): __tablename__ = 'tag' id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 标题 add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 movie = db.relationship('Movie', backref='tag') # 电影外键关联 def __str__(self): return "<Tag %r>" % self.name
class UserLog(db.Model): __tablename__ = 'userlog' id = db.Column(db.Integer, primary_key=True) # 编号 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 关联会员 ip = db.Column(db.String(100)) # 登陆IP add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 登陆时间 def __str__(self): return '<UserLog %r>' % self.id
class AdminLog(db.Model): __tablename__ = 'adminlog' id = db.Column(db.Integer, primary_key=True) # 编号 admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员 ip = db.Column(db.String(100)) # 登陆IP add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 登陆时间 def __str__(self): return '<AdminLog %r>' % self.id
class Auth(db.Model): __tablename__ = 'auth' id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 名称 url = db.Column(db.String(255), unique=True) # 地址 add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __str__(self): return '<Auth %r>' % self.name
class Moviecol(db.Model): __tablename__ = 'moviecol' id = db.Column(db.Integer, primary_key=True) # 编号 movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所属电影 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属用户 add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __str__(self): return 'Comment %r' % self.id
class Role(db.Model): __tablename__ = 'role' id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 名称 auths = db.Column(db.String(600)) add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 admin = db.relationship('Admin', backref='role') # 管理员外键关系 def __str__(self): return '<Role %r>' % self.name
class Posts(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True, autoincrement=True) rid = db.Column(db.Integer, index=True, default=0) content = db.Column(db.Text) pub_time = db.Column(db.DateTime, default=datetime.utcnow) uid = db.Column(db.Integer, db.ForeignKey("users.id")) author = db.relationship("User", backref="postes") def __repr__(self): return 'Posts:id:%d' % self.id
class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer,primary_key=True,autoincrement=True) username = db.Column(db.String(32),unique=True) password = db.Column(db.String(256)) email = db.Column(db.String(64),unique=True) # 是否激活 confirmed = db.Column(db.Boolean,default=False) icon = db.Column(db.String(64),default='default.jpg')
class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 会员名 pwd = db.Column(db.String(100)) # 密码 email = db.Column(db.String(100), unique=True) # 邮箱 phone = db.Column(db.String(11), unique=True) # 电话 info = db.Column(db.Text) # 会员介绍 face = db.Column(db.String(255), unique=True) # 头像 add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 注册时间 uuid = db.Column(db.String(255), unique=True) # 唯一标识符 userlog = db.relationship('UserLog', backref='user') # 日志外键关联 comment = db.relationship('Comment', backref='user') # 评论外键关联 moviecol = db.relationship('Moviecol', backref='user') # 收藏外键关联 def __str__(self): return '<User %r>' % self.name def check_pwd(self, pwd): from werkzeug.security import check_password_hash return check_password_hash(self.pwd, pwd)
class Admin(db.Model): __tablename__ = 'admin' id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 管理员账号 pwd = db.Column(db.String(100)) # 密码 is_super = db.Column(db.SmallInteger, default=0) # 是否蔚超级管理员,1为超级管理员 role_id = db.Column(db.Integer, db.ForeignKey('role.id')) # 所属角色 add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 adminlog = db.relationship('AdminLog', backref='admin') # 登陆日志外键关联 oplog = db.relationship('OpLog', backref='admin') # 操作日志外键关联 def check_pwd(self, pwd): from werkzeug.security import check_password_hash return check_password_hash(self.pwd, pwd) def __str__(self): return '<Admin %r>' % self.id
from .users import User from .posts import Posts from apps.exts import db collections = db.Table( 'collections', db.Column('user_id', db.Integer, db.ForeignKey('users.id')), db.Column('posts_id', db.Integer, db.ForeignKey('posts.id')), )
class User(UserMixin, db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(32), unique=True) password_hash = db.Column(db.String(256)) email = db.Column(db.String(64), unique=True) #是否激活 confirmed = db.Column(db.Boolean, default=False) icon = db.Column(db.String(128), default='default.jpg') #添加收藏功能 favorite = db.relationship('Posts', secondary='collections', backref=db.backref('usered', lazy='dynamic'), lazy='dynamic') @property #把方法可以当成属性来调用 def password(self): raise AttributeError('密码不可读属性') # password 对外 #对内 password_hash 加密后 #密码永不返回 #密码不可读 #password表示的是用户传递过来的密码 @password.setter def password(self, password): self.password_hash = generate_password_hash(password) #密码校验 参数为用户提交的密码 # 先对用户的提交的密码 进行加密 然后跟数据库中存在的加密的密码进行比较 #正确返回True 否则返回False def verify_password(self, password): return check_password_hash(self.password_hash, password) #生成token的方法 设置过期时间 def generate_token(self, expires_in=3600): s = Serializer(current_app.config['SECRET_KEY'], expires_in=expires_in) return s.dumps({'id': self.id}) #把用户的id 藏到加密的字符串中 #服务器收到以后 解密 然后拿出id 然后就知道 是哪个用户要激活 @staticmethod def check_activate_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) #解密 之前加密的字符串 except: return False u = User.query.get(data.get('id')) #解密后拿到 藏的用户id #根据这个id 取出用户的详细信息 if not u: return False if not u.confirmed: u.confirmed = True db.session.commit() return True #判断是否收藏 def is_favorite(self, pid): #获取该用户收藏的所有博客 # print(type(pid)) favorites = self.favorite.all() # print(type(favorites[0].id)) #然后判断 pid 是否在里边 posts = list(filter(lambda p: p.id == int(pid), favorites)) # print(len(posts)) if len(posts) > 0: return True return False #收藏 def add_favorite(self, pid): p = Posts.query.get(pid) self.favorite.append(p) db.session.commit() #取消收藏 def del_favorite(self, pid): p = Posts.query.get(pid) self.favorite.remove(p) db.session.commit()
class Movie(db.Model): __tablename = 'movie' id = db.Column(db.Integer, primary_key=True) # 编号 title = db.Column(db.String(255), unique=True) # 标题 url = db.Column(db.String(255), unique=True) # 地址 info = db.Column(db.Text) # 简介 logo = db.Column(db.String(255), unique=True) # 封面 star = db.Column(db.SmallInteger) # 星级 playnum = db.Column(db.BigInteger, default=0) # 播放量 commentnum = db.Column(db.BigInteger, default=0) # 评论量 tag_id = db.Column(db.Integer, db.ForeignKey('tag.id')) # 所属标签 area = db.Column(db.String(255)) # 上映地区 release_time = db.Column(db.Date) # 上映时间 length = db.Column(db.String(100)) # 播放时间 add_time = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 comment = db.relationship('Comment', backref='movie') # 评论外键关联 moviecol = db.relationship('Moviecol', backref='movie') # 收藏外键关联 def __str__(self): return '<Movie %r>' % self.title
class User(db.Model,UserMixin): __tablename__ = 'users' id = db.Column(db.Integer,primary_key=True) username = db.Column(db.String(32),unique=True) password_hash = db.Column(db.String(256)) email = db.Column(db.String(64),unique=True) # 是否激活 confirmed = db.Column(db.Boolean,default=False) icon = db.Column(db.String(128),default='default.jpg') # 添加收藏功能 favorite = db.relationship('Posts',secondary='collections',backref=db.backref('usered',lazy='dynamic'),lazy='dynamic') @property # 把方法当成属性调用 def password(self): raise AttributeError('密码不可读属性') # password 对外 # password_hash 对内,加密后 # 密码永不返回 # 密码不可读 @password.setter def password(self,password): self.password_hash = generate_password_hash(password) # 密码校验 # 对提交的密码加密,再与数据库中比较 # 正确返回True,错误返回Flase def verify_password(self,password): return check_password_hash(self.password_hash,password) # 生成token的方法 # 设置过期时间 def generate_token(self,expires_in=3600): s = Serializer(current_app.config['SECRET_KEY'],expires_in=expires_in) return s.dumps({'id': self.id}) # # 校验 @staticmethod def check_activate_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except: return False u = User.query.get(data.get('id')) if not u: return False if not u.confirmed: u.confirmed = True db.session.commit() return True #判断是否收藏 def is_favorite(self,pid): favorites = self.favorite.all() posts = list(filter(lambda p: p.id == int(pid), favorites)) # print(len(posts)) if len(posts) > 0: return True else: return False def add_favorite(self,pid): p = Posts.query.get(pid) self.favorite.append(p) db.session.commit() def del_favorite(self,pid): p = Posts.query.get(pid) self.favorite.remove(p) db.session.commit()