class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) user_profile_id = db.Column( db.Integer(), db.ForeignKey('user_profile.id', ondelete='CASCADE')) # User authentication information username = db.Column(db.String(50), nullable=False, unique=True) password = db.Column(db.String(255), nullable=False, server_default='') reset_password_token = db.Column(db.String(100), nullable=False, server_default='') is_active = db.Column('is_active', db.Boolean(), nullable=False, server_default='0') # User email information email = db.Column(db.String(255), nullable=False, unique=True) confirmed_at = db.Column(db.DateTime()) # Relationships user_profile = db.relationship('UserProfile', uselist=False, foreign_keys=[user_profile_id]) def __repr__(self): return '<id: {}, user_profile_id: {}, username: {}, is_active: {}, email: {}' \ .format(self.id, self.user_profile_id, self.username, self.is_active, self.email)
class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True) name = db.Column(db.String(255), nullable=False) phone_number = db.Column(db.String(255)) photo = db.Column(db.String(255)) about = db.Column(db.String(1000)) why = db.Column(db.String(1000)) password = db.Column(db.String(255)) active = db.Column(db.Boolean(), default=False) approved = db.Column(db.Boolean(), default=False) confirmed_at = db.Column(db.DateTime()) roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) registered_at = db.Column(db.DateTime, default=datetime.now) @property def is_logged_in(self): return False if self.is_anonymous() else True @property def is_admin(self): return self.roles and self.roles[0].name == 'admin' def __repr__(self): return self.name @property def admin_url(self): return "%s/%s/%s" % (app.config['ADMIN_URL'], 'user', self.id) @property def url(self): return "%s/%s/" % ('profiles', self.name)
class Post(db.Model): id = db.Column(db.Integer, primary_key=True) input = db.Column(db.String(200), nullable=False) date_posted = db.Column(db.DateTime(), nullable=False, default=datetime.utcnow()) generated = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
class Event(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(1000)) type = db.Column(db.String(10)) # date = db.Column(db.DateTime(100)) # might be DateTime.date or DateTime.datetime location = db.Column(db.String(100)) creator = db.Column(db.String(1000)) # time = db.Column(db.Integer(100)) # maybe improve using date time later description = db.Column(db.String()) datetime = db.Column(db.DateTime())
class User(UserMixin, db.Model): __bind_key__ = 'users' id = db.Column(db.Integer, primary_key=True) date_created = db.Column(db.DateTime, default=db.func.current_timestamp()) date_modified = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp()) email = db.Column(db.String(255)) username = db.Column(db.String(80), unique=True) password = db.Column(db.String(100)) fname = db.Column(db.String(50)) lname = db.Column(db.String(50)) interests = db.Column(db.String(500)) education = db.Column(db.String(100)) user_since = db.Column(db.DateTime(), default=db.func.current_timestamp()) verified = db.Column(db.Boolean(), default=False) def set_password(self, password): self.password = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password, password) def is_verified(self): return self.verified def get_name(self): return self.username def get_email(self): return self.email def get_education(self): return self.education def get_date_created(self): return self.date_created def get_date_modified(self): return self.date_modified def get_interests(self): return self.interests def get_interests_list(self): return self.interests.split(",")
class Note(db.Model): id = db.Column(db.Integer, primary_key=True) data = db.Column(db.String(10000)) date = db.Column(db.DateTime(timezone=True), default=func.now()) user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
class User(UserMixin,db.Model): __tablename__='users' id=db.Column(db.Integer,primary_key=True) email=db.Column(db.String(64),unique=True,index=True) username=db.Column(db.String(64),unique=True,index=True) password_hash=db.Column(db.String(128)) #建立关系表 role_id=db.Column(db.Integer,db.ForeignKey('roles.id')) confirmed=db.Column(db.Boolean,default=False) #跟goal建立关联 goals=db.relationship('Goal',backref='user',lazy='dynamic') #用户信息字段 name=db.Column(db.String(64)) location=db.Column(db.String(64)) about_me=db.Column(db.Text()) member_since=db.Column(db.Datetime(),default=datetime.utcnow) last_seen=db.Column(db.DateTime(),default=datetime.utcnow()) #增加用户头像数据 avatar_hash=db.Column(db.String(32)) def __repr__(self): return '<User %r>'%self.username def __init__(self,**kwargs): super(User,self).__init__(**kwargs) #初始化使用缓存的MD5散列值生成Gravatar URL if self.email is not None and self.avatar_hash is None: self.avatar_hash=hashlib.md5(self.email.encode('utf-8')).hexdigest() @property def password(self): raise AttributeError('password is not a readable attribute') @password.setter def password(self,password): self.password_hash=generate_password_hash(password) def verify_password(self,password): return check_password_hash(self.password_hash,password) def generate_confirmation_token(self,expiration=3600): s=Serializer(current_app.config['SECRET_KEY'],expiration) return s.dumps({'confirm':self.id}) def confirm(self,token): s=Serializer(current_app.config['SECRET_KEY']) try: data=s.loads(token) except: return False if data.get('confirm')!=self.id: return False self.confirmed=True db.session.add(self) return True #刷新用户的最后访问时间 def ping(self): self.last_seen=datetime.utcnow() db.session.add(self) #定义默认的用户角色 if self.role is None: if self.email==current_app.config['FLASKY_ADMIN']: self.role=Role.query.filter_by(permissions=0xff).first() if self.role is None: self.role=Role.query.filter_by(default=True).first() #检查用户是否有指定权限 def can(self,permissions): return self.role is not None and\ (self.role.permission & permissions)==permissions def is_administrator(self): return self.can(Permission.ADMINISTER) #生成用户头像 def gravatar(self,size=100,default='identicon',rating='g'): if request.is_secure: url='http://secure.gravatar.com/avatar' else: url='http://www.gravatar.com/avatar' hash=hashlib.md5(self.email.encode('utf-8')).hexdigest() return '{url}/{hash}?s={size}&d={default}&r={rating}'.format( url=url,hash=hash,size=size,default=default,rating=rating) def change_email(self,token): self.email=new_email self.avatar_hash=hashlib.md5(self.email.encode('utf-8')).hexdigest() db.session.add(self) return True def gravatar(self,size=100,default='identicon',rating='g'): if request.is_secure: url='http://secure.gravatar.com/avatar' else: url='http://www.gravatar.com/avatar' hash=self.avatar_hash or hashlib.md5(self.email.encode('utf-8')).hexdigest() return '{url}/{hash}?s={size}&d={default}&r={rating}'.format(url=url,hash=hash,size=size,default=default,rating=rating)
class Payment(db.Model): id = db.Column(db.Integer, primary_key=True) currency = db.Column(db.String(3)) payment_amount = db.Column(db.Integer) date = db.Column(db.DateTime(timezone=True), default=func.now()) note = db.Column(db.String)