views.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: views.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-12-22 21:49:05 (CST)
  9. # Last Update: Wednesday 2019-05-08 15:09:18 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import render_template, request
  14. from forums.api.tag.db import Tags
  15. from forums.api.topic.db import Topic
  16. from forums.api.collect.db import Collect
  17. from forums.api.user.db import User
  18. from forums.common.response import HTTPResponse
  19. from forums.common.views import IsAuthMethodView as MethodView
  20. from forums.api.message.db import MessageClient
  21. class FollowingTagsView(MethodView):
  22. def get(self):
  23. user = request.user
  24. page, number = self.pageinfo
  25. filter_dict = {'followers__username': user.username}
  26. tags = Tags.query.filter_by(**filter_dict).paginate(page, number, True)
  27. data = {'tags': tags}
  28. return render_template('follow/following_tags.html', **data)
  29. def post(self):
  30. user = request.user
  31. post_data = request.data
  32. tag_id = post_data.pop('tagId', None)
  33. if tag_id is not None and not User.query.filter_by(
  34. following_tags__id=tag_id).exists():
  35. tag = Tags.query.filter_by(id=tag_id).first_or_404()
  36. user.following_tags.append(tag)
  37. user.save()
  38. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()
  39. def delete(self):
  40. user = request.user
  41. post_data = request.data
  42. tag_id = post_data.pop('tagId', None)
  43. if tag_id is not None and User.query.filter_by(
  44. following_tags__id=tag_id).exists():
  45. tag = Tags.query.filter_by(id=tag_id).first_or_404()
  46. user.following_tags.remove(tag)
  47. user.save()
  48. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()
  49. class FollowingTopicsView(MethodView):
  50. def get(self):
  51. user = request.user
  52. page, number = self.pageinfo
  53. filter_dict = {'followers__username': user.username}
  54. topics = Topic.query.filter_by(**filter_dict).paginate(page, number,
  55. True)
  56. data = {'topics': topics}
  57. return render_template('follow/following_topics.html', **data)
  58. def post(self):
  59. user = request.user
  60. post_data = request.data
  61. topic_id = post_data.pop('pk', None)
  62. if topic_id is not None and not User.query.filter_by(
  63. following_topics__id=topic_id).exists():
  64. topic = Topic.query.filter_by(id=topic_id).first_or_404()
  65. user.following_topics.append(topic)
  66. user.save()
  67. # notice
  68. MessageClient.follow(topic)
  69. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()
  70. def delete(self):
  71. user = request.user
  72. post_data = request.data
  73. topic_id = post_data.pop('pk', None)
  74. if topic_id is not None and User.query.filter_by(
  75. following_topics__id=topic_id).exists():
  76. topic = Topic.query.filter_by(id=topic_id).first_or_404()
  77. user.following_topics.remove(topic)
  78. user.save()
  79. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()
  80. class FollowingUsersView(MethodView):
  81. def get(self):
  82. user = request.user
  83. page, number = self.pageinfo
  84. users = user.following_users.paginate(page, number, True)
  85. data = {'users': users}
  86. return render_template('follow/following_users.html', **data)
  87. def post(self):
  88. user = request.user
  89. post_data = request.data
  90. user_id = post_data.pop('userId', None)
  91. if user_id is not None:
  92. f_user = User.query.filter_by(id=user_id).first_or_404()
  93. if not f_user.is_followed(user):
  94. user.following_users.append(f_user)
  95. user.save()
  96. MessageClient.follow(f_user)
  97. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()
  98. def delete(self):
  99. user = request.user
  100. post_data = request.data
  101. user_id = post_data.pop('userId', None)
  102. if user_id is not None:
  103. f_user = User.query.filter_by(id=user_id).first_or_404()
  104. if f_user.is_followed(user):
  105. user.following_users.remove(f_user)
  106. user.save()
  107. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()
  108. class FollowingCollectsView(MethodView):
  109. def get(self):
  110. user = request.user
  111. page, number = self.pageinfo
  112. filter_dict = {'followers__username': user.username}
  113. collects = Collect.query.filter_by(**filter_dict).paginate(
  114. page, number, True)
  115. data = {'collects': collects}
  116. return render_template('follow/following_collects.html', **data)
  117. def post(self):
  118. user = request.user
  119. post_data = request.data
  120. collect_id = post_data.pop('collectId', None)
  121. if collect_id is not None and not User.query.filter_by(
  122. following_collects__id=collect_id).exists():
  123. collect = Collect.query.filter_by(id=collect_id).first_or_404()
  124. user.following_collects.append(collect)
  125. user.save()
  126. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()
  127. def delete(self):
  128. user = request.user
  129. post_data = request.data
  130. collect_id = post_data.pop('collectId', None)
  131. if collect_id is not None and User.query.filter_by(
  132. following_collects__id=collect_id).exists():
  133. collect = Collect.query.filter_by(id=collect_id).first_or_404()
  134. user.following_collects.remove(collect)
  135. user.save()
  136. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()