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