views.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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-05-20 18:04:43 (CST)
  9. # Last Update:星期日 2016-7-24 17:16:21 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import (render_template, request, redirect, url_for, jsonify,
  14. current_app)
  15. from flask.views import MethodView
  16. from flask_maple.forms import flash_errors
  17. from flask_login import current_user
  18. from flask_maple.forms import return_errors
  19. from maple import app
  20. from maple.helpers import is_num
  21. from maple.topic.models import Collect
  22. from maple.mine.forms import CollectForm
  23. from .controls import CollectModel, FollowModel, LikeModel, CollectDetail
  24. from .permission import (follow_permission, collect_permission,
  25. collect_detail_permission, like_permission)
  26. class CollectAPI(MethodView):
  27. decorators = [collect_permission]
  28. def template_without_uid(self, data):
  29. form = CollectForm()
  30. data_form = {'form': form}
  31. data.update(data_form)
  32. return render_template('mine/collect_list.html', **data)
  33. def get(self, collectId):
  34. if collectId is None:
  35. page = is_num(request.args.get('page'))
  36. collects = current_user.collects.paginate(page,
  37. app.config['PER_PAGE'],
  38. error_out=True)
  39. data = {'collects': collects}
  40. return self.template_without_uid(data)
  41. else:
  42. return redirect(url_for('mine.collect_detail',
  43. collectId=collectId))
  44. def post(self):
  45. form = CollectForm()
  46. if form.validate_on_submit():
  47. CollectModel.post_data(form)
  48. return redirect(url_for('mine.collect'))
  49. else:
  50. if form.errors:
  51. flash_errors(form)
  52. return redirect(url_for('mine.collect'))
  53. def put(self, collectId):
  54. form = CollectForm()
  55. if form.validate_on_submit():
  56. CollectModel.put_data(form, collectId)
  57. return jsonify(judge=True)
  58. else:
  59. if form.errors:
  60. return return_errors(form)
  61. return jsonify(judge=False)
  62. def delete(self, collectId):
  63. CollectModel.delete_data(collectId)
  64. return jsonify(judge=True)
  65. def collect_following():
  66. return redirect(url_for('mine.follow', type='collect'))
  67. class CollectDetailAPI(MethodView):
  68. decorators = [collect_detail_permission]
  69. def template_with_uid(self, data):
  70. form = CollectForm()
  71. collect = data['collect']
  72. form.name.data = collect.name
  73. form.description.data = collect.description
  74. form.is_privacy.data = 0 if collect.is_privacy else 1
  75. data_form = {'form': form}
  76. data.update(data_form)
  77. return render_template('mine/collect.html', **data)
  78. def get(self, collectId):
  79. if collectId is not None:
  80. page = is_num(request.args.get('page'))
  81. collect = Collect.query.filter_by(id=collectId).first_or_404()
  82. topics = collect.topics.paginate(page, 10, True)
  83. data = {'collect': collect, 'topics': topics}
  84. return self.template_with_uid(data)
  85. else:
  86. return redirect(url_for('mine.collect'))
  87. def post(self):
  88. form = request.form.getlist('add-to-collect')
  89. topicId = request.args.get('topicId')
  90. topic = CollectDetail.post(form, topicId)
  91. return redirect(url_for('topic.topic', topicId=topic.uid))
  92. def delete(self, collectId):
  93. data = request.get_json()
  94. topicId = data['topicId']
  95. CollectDetail.delete(topicId, collectId)
  96. print('删除细节')
  97. return jsonify(judge=True)
  98. class LikeAPI(MethodView):
  99. decorators = [like_permission]
  100. def post(self, replyId):
  101. LikeModel.post_data(replyId)
  102. return jsonify(judge=True)
  103. def delete(self, replyId):
  104. LikeModel.delete_data(replyId)
  105. return jsonify(judge=True)
  106. class FollowAPI(MethodView):
  107. decorators = [follow_permission]
  108. def get(self, type):
  109. page = is_num(request.args.get('page'))
  110. per_page = current_app.config['PER_PAGE']
  111. if type == 'tag':
  112. following = current_user.following_tags.paginate(page, per_page,
  113. False)
  114. return render_template('follow/following_tag.html',
  115. following_type=type,
  116. following=following)
  117. elif type == 'user':
  118. following = current_user.following_users.paginate(page, per_page,
  119. False)
  120. return render_template('follow/following_user.html',
  121. following_type=type,
  122. following=following)
  123. elif type == 'collect':
  124. following = current_user.following_collects.paginate(
  125. page, per_page, False)
  126. return render_template('follow/following_collect.html',
  127. following_type=type,
  128. following=following)
  129. else:
  130. following = current_user.following_topics.paginate(page, per_page,
  131. False)
  132. return render_template('follow/following_topic.html',
  133. following_type=type,
  134. following=following)
  135. def post(self, type):
  136. data = request.get_json()
  137. id = data['id']
  138. FollowModel.post_data(type, id)
  139. return jsonify(judge=True)
  140. def delete(self, type):
  141. data = request.get_json()
  142. id = data['id']
  143. FollowModel.delete_data(type, id)
  144. return jsonify(judge=True)