models.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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:32:12 (CST)
  9. # Last Update:星期日 2016-7-24 19:58:44 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import current_app
  14. from maple import db
  15. from datetime import datetime
  16. from sqlalchemy import event
  17. class Topic(db.Model):
  18. __tablename__ = 'topics'
  19. id = db.Column(db.Integer, primary_key=True)
  20. uid = db.Column(db.String(36), nullable=False)
  21. title = db.Column(db.String(81), nullable=False)
  22. content = db.Column(db.Text, nullable=False)
  23. publish = db.Column(db.DateTime, default=datetime.utcnow())
  24. updated = db.Column(db.DateTime)
  25. vote = db.Column(db.Integer, default=0)
  26. author_id = db.Column(db.Integer,
  27. db.ForeignKey('users.id',
  28. ondelete="CASCADE"))
  29. author = db.relationship('User',
  30. backref=db.backref('topics',
  31. cascade='all,delete-orphan',
  32. lazy='dynamic'))
  33. board_id = db.Column(db.Integer,
  34. db.ForeignKey('boards.id',
  35. ondelete="CASCADE"))
  36. board = db.relationship(
  37. 'Board',
  38. backref=db.backref('topics',
  39. cascade='all,delete-orphan',
  40. lazy='dynamic',
  41. order_by='Topic.publish.desc()'))
  42. is_good = db.Column(db.Boolean, default=False)
  43. is_top = db.Column(db.Boolean, default=False)
  44. # is_top = db.Column(db.Integer, default = 0)
  45. is_markdown = db.Column(db.Boolean, default=False)
  46. is_draft = db.Column(db.Boolean, default=False)
  47. __mapper_args__ = {"order_by": publish.desc()}
  48. def __str__(self):
  49. return self.title
  50. def __repr__(self):
  51. return "<Topic %r>" % self.title
  52. def pagea(self, page=None):
  53. per_page = current_app.config['PER_PAGE']
  54. return self.paginate(page, per_page, True)
  55. # @staticmethod
  56. # def page(page):
  57. # app = current_app._get_current_object()
  58. # per_page = app.config['PER_PAGE']
  59. # return Topic.paginate(page, per_page, True)
  60. @event.listens_for(Topic, 'before_update')
  61. def receive_after_update(mapper, connection, target):
  62. target.updated = datetime.now()
  63. class Reply(db.Model):
  64. __tablename__ = 'replies'
  65. id = db.Column(db.Integer, primary_key=True)
  66. content = db.Column(db.Text, nullable=False)
  67. # quote = db.Column(db.Text, nullable=True)
  68. publish = db.Column(db.DateTime, default=datetime.now())
  69. updated = db.Column(db.DateTime)
  70. topic_id = db.Column(db.Integer,
  71. db.ForeignKey('topics.id',
  72. ondelete="CASCADE"))
  73. topic = db.relationship(
  74. 'Topic',
  75. backref=db.backref('replies',
  76. cascade='all,delete-orphan',
  77. lazy='dynamic',
  78. order_by='Reply.publish.desc()'))
  79. author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  80. author = db.relationship('User',
  81. backref=db.backref('replies',
  82. lazy='dynamic',
  83. order_by='Reply.publish'))
  84. likers = db.relationship(
  85. 'User',
  86. secondary='likes',
  87. backref=db.backref("likes", lazy='dynamic'))
  88. __mapper_args__ = {"order_by": publish.desc()}
  89. class CollectTopic(db.Model):
  90. __tablename__ = 'collect_topic'
  91. id = db.Column(db.Integer, primary_key=True)
  92. topic_id = db.Column(db.Integer, db.ForeignKey('topics.id'))
  93. collect_id = db.Column(db.Integer, db.ForeignKey('collects.id'))
  94. class Collect(db.Model):
  95. __tablename__ = 'collects'
  96. id = db.Column(db.Integer, primary_key=True)
  97. name = db.Column(db.String(32), nullable=False)
  98. description = db.Column(db.String(256))
  99. is_privacy = db.Column(db.Boolean, default=False)
  100. author_id = db.Column(db.Integer,
  101. db.ForeignKey('users.id',
  102. ondelete="CASCADE"))
  103. author = db.relationship('User',
  104. backref=db.backref('collects',
  105. cascade='all,delete-orphan',
  106. lazy='dynamic'))
  107. topics = db.relationship('Topic',
  108. secondary='collect_topic',
  109. lazy='dynamic',
  110. backref="collects")
  111. def __str__(self):
  112. return self.name
  113. def __repr__(self):
  114. return "<Collect %r>" % self.name
  115. class Like(db.Model):
  116. __tablename__ = 'likes'
  117. id = db.Column(db.Integer, primary_key=True)
  118. author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  119. reply_id = db.Column(db.Integer, db.ForeignKey('replies.id'))
  120. like_time = db.Column(db.DateTime, default=datetime.now())