models.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: models.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-05-20 13:24:19 (CST)
  9. # Last Update:星期四 2016-6-30 21:14:5 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from maple import db
  14. from datetime import datetime
  15. from flask_login import UserMixin
  16. from werkzeug.security import generate_password_hash, \
  17. check_password_hash
  18. class UserRole(db.Model):
  19. __tablename__ = 'user_role'
  20. id = db.Column(db.Integer, primary_key=True)
  21. user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  22. roles_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
  23. class Follow(db.Model):
  24. __tablename__ = 'follows'
  25. id = db.Column(db.Integer, primary_key=True)
  26. follower_id = db.Column(db.Integer,
  27. db.ForeignKey('users.id'))
  28. following_user_id = db.Column(db.Integer,
  29. db.ForeignKey('users.id'))
  30. following_tag_id = db.Column(db.Integer,
  31. db.ForeignKey('tags.id'))
  32. following_collect_id = db.Column(db.Integer,
  33. db.ForeignKey('collects.id'))
  34. followinf_topic_id = db.Column(db.Integer,
  35. db.ForeignKey('topics.id'))
  36. class User(db.Model, UserMixin):
  37. __tablename__ = 'users'
  38. id = db.Column(db.Integer, primary_key=True)
  39. username = db.Column(db.String(49), unique=True)
  40. email = db.Column(db.String(81), unique=True)
  41. password = db.Column(db.String, nullable=False)
  42. is_superuser = db.Column(db.Boolean, default=False)
  43. is_confirmed = db.Column(db.Boolean, default=False)
  44. register_time = db.Column(db.DateTime, default=datetime.now())
  45. likes = db.relationship('Reply',
  46. secondary='likes',
  47. lazy='dynamic',
  48. backref="likers"
  49. )
  50. following_tags = db.relationship('Tags',
  51. secondary='follows',
  52. primaryjoin="User.id==follows.c.follower_id",
  53. # lazy='dynamic',
  54. backref=db.backref(
  55. 'followers', lazy='dynamic'),
  56. # cascade='all,delete-orphan',
  57. # single_parent=True,
  58. )
  59. following_topics = db.relationship('Topic',
  60. secondary='follows',
  61. primaryjoin="User.id==follows.c.follower_id",
  62. # lazy='dynamic',
  63. backref=db.backref(
  64. 'followers', lazy='dynamic'),
  65. # cascade='all,delete-orphan',
  66. # single_parent=True,
  67. )
  68. following_collects = db.relationship('Collect',
  69. secondary='follows',
  70. primaryjoin="User.id==follows.c.follower_id",
  71. backref=db.backref(
  72. 'followers', lazy='dynamic'),
  73. # lazy='dynamic',
  74. # cascade='all,delete-orphan',
  75. # single_parent=True,
  76. )
  77. following_users = db.relationship('User',
  78. secondary='follows',
  79. primaryjoin="User.id==follows.c.follower_id",
  80. secondaryjoin="User.id==follows.c.following_user_id",
  81. backref=db.backref(
  82. 'followers', lazy='dynamic'),
  83. # lazy='dynamic'
  84. )
  85. setting_id = db.Column(db.Integer,
  86. db.ForeignKey('usersetting.id',
  87. ondelete="CASCADE"))
  88. setting = db.relationship("UserSetting",
  89. backref="user",
  90. cascade='all,delete',
  91. uselist=False)
  92. infor_id = db.Column(db.Integer,
  93. db.ForeignKey('userinfor.id',
  94. ondelete="CASCADE"))
  95. infor = db.relationship("UserInfor",
  96. backref=db.backref('user', lazy='joined'),
  97. cascade='all,delete',
  98. uselist=False)
  99. def __str__(self):
  100. return self.username
  101. def __repr__(self):
  102. return '<User %r>' % self.username
  103. @staticmethod
  104. def set_password(password):
  105. pw_hash = generate_password_hash(password)
  106. return pw_hash
  107. def check_password(self, password):
  108. return check_password_hash(self.password, password)
  109. class Role(db.Model):
  110. __tablename__ = 'roles'
  111. id = db.Column(db.Integer, primary_key=True)
  112. rolename = db.Column(db.String(81), nullable=False, default='unconfirmed')
  113. description = db.Column(db.String(255), nullable=True)
  114. users = db.relationship('User',
  115. secondary='user_role',
  116. backref=db.backref('roles', lazy='dynamic'))
  117. class UserInfor(db.Model):
  118. __tablename__ = 'userinfor'
  119. id = db.Column(db.Integer, primary_key=True)
  120. # confirmed_time = db.Column(db.DateTime, nullable=True)
  121. # registered_time = db.Column(db.DateTime, nullable=False)
  122. # score = db.Column(db.Integer, nullable=False, default=100)
  123. avatar = db.Column(db.String)
  124. word = db.Column(db.Text, nullable=True)
  125. introduce = db.Column(db.Text, nullable=True)
  126. school = db.Column(db.String, nullable=True)
  127. # def __init__(self):
  128. # self.registered_time = datetime.now()
  129. def __repr__(self):
  130. return "<UserInfor %r>" % self.id
  131. class UserSetting(db.Model):
  132. '''
  133. 1:all user
  134. 2:logined user
  135. 3:only own
  136. '''
  137. __tablename__ = 'usersetting'
  138. id = db.Column(db.Integer, primary_key=True)
  139. online_status = db.Column(db.Integer, nullable=False, default=1)
  140. topic_list = db.Column(db.Integer, nullable=False, default=1)
  141. rep_list = db.Column(db.Integer, nullable=False, default=1)
  142. ntb_list = db.Column(db.Integer, nullable=False, default=3)
  143. collect_list = db.Column(db.Integer, nullable=False, default=2)
  144. locale = db.Column(db.String(32), default='zh')
  145. timezone = db.Column(db.String(32), default='UTC')
  146. def __repr__(self):
  147. return "<UserSetting %r>" % self.id
  148. class OpenID(db.Model):
  149. __tablename__ = 'openids'
  150. id = db.Column(db.Integer, primary_key=True)
  151. openid = db.Column(db.Integer, nullable=False)
  152. openid_type = db.Column(db.String, nullable=False)
  153. nickname = db.Column(db.String, nullable=False)
  154. email = db.Column(db.String)
  155. avatar = db.Column(db.String)
  156. user_id = db.Column(db.Integer,
  157. db.ForeignKey('users.id',
  158. ondelete="CASCADE"))
  159. user = db.relationship('User',
  160. backref=db.backref('openids',
  161. cascade='all,delete-orphan',
  162. lazy='dynamic'))
  163. # class Invite(db.Model):
  164. # __tablename__ = 'invites'
  165. # id = db.Column(db.Integer, primary_key=True)
  166. # invite_id = db.Column(db.Integer,
  167. # db.ForeignKey('users.id',
  168. # ondelete="CASCADE"))
  169. # invite = db.relationship("User",
  170. # uselist=False,
  171. # foreign_keys='Invite.invite_id',
  172. # backref="invited"
  173. # )
  174. # invited_id = db.Column(db.Integer,
  175. # db.ForeignKey('users.id',
  176. # ondelete="CASCADE"))
  177. # invited = db.relationship("User",
  178. # uselist=False,
  179. # foreign_keys='Invite.invited_id',
  180. # backref="invite"
  181. # )
  182. # topic_id = db.Column(db.Integer,
  183. # db.ForeignKey('topics.id',
  184. # ondelete="CASCADE"))
  185. # topic = db.relationship("Topic",
  186. # uselist=False,
  187. # backref="invited"
  188. # )