views.py 5.9 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:星期六 2017-4-1 19:52:14 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import render_template, request
  14. from forums.api.tag.models import Tags
  15. from forums.api.topic.models import Topic
  16. from forums.api.collect.models import Collect
  17. from forums.api.user.models import User
  18. from forums.common.response import HTTPResponse
  19. from forums.common.views import IsAuthMethodView as MethodView
  20. from forums.api.message.models import MessageClient
  21. class FollowingTagsView(MethodView):
  22. def get(self):
  23. user = request.user
  24. page, number = self.page_info
  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.page_info
  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('topicId', 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('topicId', 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.page_info
  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.page_info
  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()