123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #!/usr/bin/env python
- # -*- coding=UTF-8 -*-
- # **************************************************************************
- # Copyright © 2016 jianglin
- # File Name: models.py
- # Author: jianglin
- # Email: xiyang0807@gmail.com
- # Created: 2016-05-20 13:24:19 (CST)
- # Last Update:星期六 2016-7-30 13:23:46 (CST)
- # By:
- # Description:
- # **************************************************************************
- from maple import db
- from maple.tag.models import Tags
- from maple.mine.models import Follow
- from maple.topic.models import Topic
- from datetime import datetime
- from flask_login import UserMixin
- from werkzeug.security import (generate_password_hash, check_password_hash)
- __all__ = ['User', 'UserRole', 'Role', 'UserInfor', 'UserSetting', 'OpenID']
- class UserRole(db.Model):
- __tablename__ = 'user_role'
- id = db.Column(db.Integer, primary_key=True)
- user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
- roles_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
- class User(db.Model, UserMixin):
- __tablename__ = 'users'
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(49), unique=True)
- email = db.Column(db.String(81), unique=True)
- password = db.Column(db.String, nullable=False)
- is_superuser = db.Column(db.Boolean, default=False)
- is_confirmed = db.Column(db.Boolean, default=False)
- register_time = db.Column(db.DateTime, default=datetime.now())
- following_tags = db.relationship(
- 'Tags',
- secondary='follows',
- primaryjoin="User.id==follows.c.follower_id",
- lazy='dynamic',
- backref=db.backref('followers', lazy='dynamic'))
- following_topics = db.relationship(
- 'Topic',
- secondary='follows',
- primaryjoin="User.id==follows.c.follower_id",
- lazy='dynamic',
- backref=db.backref('followers', lazy='dynamic'))
- following_collects = db.relationship(
- 'Collect',
- secondary='follows',
- primaryjoin="User.id==follows.c.follower_id",
- lazy='dynamic',
- backref=db.backref('followers', lazy='dynamic'))
- following_users = db.relationship(
- 'User',
- secondary='follows',
- primaryjoin="User.id==follows.c.follower_id",
- secondaryjoin="User.id==follows.c.following_user_id",
- lazy='dynamic',
- backref=db.backref('followers', lazy='dynamic'), )
- setting_id = db.Column(db.Integer,
- db.ForeignKey('usersetting.id',
- ondelete="CASCADE"))
- setting = db.relationship("UserSetting",
- backref="user",
- cascade='all,delete',
- uselist=False)
- infor_id = db.Column(db.Integer,
- db.ForeignKey('userinfor.id',
- ondelete="CASCADE"))
- infor = db.relationship("UserInfor",
- backref=db.backref('user', lazy='joined'),
- cascade='all,delete',
- uselist=False)
- roles = db.relationship('Role',
- secondary='user_role',
- backref=db.backref('users'),
- lazy='dynamic')
- def __str__(self):
- return self.username
- def __repr__(self):
- return '<User %r>' % self.username
- # @property
- # def password(self):
- # return "密码不是可读形式!"
- # @password.setter
- # def password(self, password):
- # self.password_hash = generate_password_hash(password)
- # def verify_password(self, password):
- # return check_password_hash(password)
- @staticmethod
- def set_password(password):
- pw_hash = generate_password_hash(password)
- return pw_hash
- def check_password(self, password):
- return check_password_hash(self.password, password)
- roles_parents = db.Table(
- 'roles_parents',
- db.Column('role_id', db.Integer, db.ForeignKey('roles.id')),
- db.Column('parent_id', db.Integer, db.ForeignKey('roles.id')))
- class Role(db.Model):
- __tablename__ = 'roles'
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(81), nullable=False, default='unconfirmed')
- description = db.Column(db.String(255), nullable=True)
- parents = db.relationship('Role',
- secondary=roles_parents,
- primaryjoin=(id == roles_parents.c.role_id),
- secondaryjoin=(id == roles_parents.c.parent_id),
- backref=db.backref('children'))
- def __str__(self):
- return self.name
- def __repr__(self):
- return '<Role %r>' % self.name
- class UserInfor(db.Model):
- __tablename__ = 'userinfor'
- id = db.Column(db.Integer, primary_key=True)
- # confirmed_time = db.Column(db.DateTime, nullable=True)
- # registered_time = db.Column(db.DateTime, nullable=False)
- # score = db.Column(db.Integer, nullable=False, default=100)
- avatar = db.Column(db.String)
- word = db.Column(db.Text, nullable=True)
- introduce = db.Column(db.Text, nullable=True)
- school = db.Column(db.String, nullable=True)
- def __repr__(self):
- return "<UserInfor %r>" % self.id
- class UserSetting(db.Model):
- '''
- 1:all user
- 2:logined user
- 3:only own
- '''
- __tablename__ = 'usersetting'
- id = db.Column(db.Integer, primary_key=True)
- online_status = db.Column(db.Integer, nullable=False, default=1)
- topic_list = db.Column(db.Integer, nullable=False, default=1)
- rep_list = db.Column(db.Integer, nullable=False, default=1)
- ntb_list = db.Column(db.Integer, nullable=False, default=3)
- collect_list = db.Column(db.Integer, nullable=False, default=2)
- locale = db.Column(db.String(32), default='zh')
- timezone = db.Column(db.String(32), default='UTC')
- def __repr__(self):
- return "<UserSetting %r>" % self.id
- # class OpenID(db.Model):
- # __tablename__ = 'openids'
- # id = db.Column(db.Integer, primary_key=True)
- # openid = db.Column(db.Integer, nullable=False)
- # openid_type = db.Column(db.String, nullable=False)
- # nickname = db.Column(db.String, nullable=False)
- # email = db.Column(db.String)
- # avatar = db.Column(db.String)
- # user_id = db.Column(db.Integer,
- # db.ForeignKey('users.id',
- # ondelete="CASCADE"))
- # user = db.relationship('User',
- # backref=db.backref('openids',
- # cascade='all,delete-orphan',
- # lazy='dynamic'))
- from . import events
|