views.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2017 jianglin
  5. # File Name: views.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2017-03-28 16:15:08 (CST)
  9. # Last Update:星期三 2017-5-10 16:35:10 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import redirect, render_template, request, url_for
  14. from flask_babelex import gettext as _
  15. from flask_login import current_user
  16. from flask_maple.form import form_validate
  17. from flask_maple.response import HTTPResponse
  18. from forums.api.forms import (CollectForm, ReplyForm, TopicForm,
  19. collect_error_callback, error_callback,
  20. form_board)
  21. from forums.api.forums.models import Board
  22. from forums.api.tag.models import Tags
  23. from forums.api.topic.models import Topic
  24. from forums.common.serializer import Serializer
  25. from forums.common.utils import gen_filter_dict, gen_order_by
  26. from forums.common.views import IsAuthMethodView as MethodView
  27. from forums.api.message.models import MessageClient
  28. from .models import Collect
  29. class CollectListView(MethodView):
  30. def get(self):
  31. query_dict = request.data
  32. user = request.user
  33. form = CollectForm()
  34. page, number = self.page_info
  35. keys = ['name']
  36. order_by = gen_order_by(query_dict, keys)
  37. filter_dict = gen_filter_dict(query_dict, keys)
  38. filter_dict.update(author_id=user.id)
  39. collects = Collect.query.filter_by(
  40. **filter_dict).order_by(*order_by).paginate(page, number, True)
  41. data = {'title': 'Collect', 'collects': collects, 'form': form}
  42. return render_template('collect/collect_list.html', **data)
  43. @form_validate(CollectForm, error=collect_error_callback, f='')
  44. def post(self):
  45. user = request.user
  46. form = CollectForm()
  47. name = form.name.data
  48. description = form.description.data
  49. is_hidden = form.is_hidden.data
  50. is_hidden = True if is_hidden == 0 else False
  51. collect = Collect(
  52. name=name, description=description, is_hidden=is_hidden)
  53. collect.author = user
  54. collect.save()
  55. return redirect(url_for('collect.list'))
  56. class CollectView(MethodView):
  57. def get(self, pk):
  58. user = request.user
  59. page, number = self.page_info
  60. collect = Collect.query.filter_by(
  61. id=pk, author_id=user.id).first_or_404()
  62. form = CollectForm()
  63. form.name.data = collect.name
  64. form.description.data = collect.description
  65. form.is_hidden.data = 0 if collect.is_hidden else 1
  66. topics = collect.topics.paginate(page, number, True)
  67. data = {'collect': collect, 'topics': topics, 'form': form}
  68. return render_template('collect/collect.html', **data)
  69. def put(self, pk):
  70. post_data = request.data
  71. collect = Collect.query.filter_by(id=pk).first_or_404()
  72. name = post_data.pop('name', None)
  73. description = post_data.pop('description', None)
  74. is_hidden = post_data.pop('is_hidden', None)
  75. if name is not None:
  76. collect.name = name
  77. if description is not None:
  78. collect.description = description
  79. if is_hidden is not None:
  80. collect.is_hidden = is_hidden
  81. collect.save()
  82. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()
  83. def delete(self, pk):
  84. collect = Collect.query.filter_by(id=pk).first_or_404
  85. collect.delete()
  86. return HTTPResponse(HTTPResponse.NORMAL_STATUS).to_response()
  87. class AddToCollectView(MethodView):
  88. def post(self, topicId):
  89. user = request.user
  90. form = request.form.getlist('add-to-collect')
  91. topic = Topic.query.filter_by(id=topicId).first_or_404()
  92. for cid in form:
  93. '''This has a problem'''
  94. collect = Collect.query.filter_by(id=cid).first_or_404()
  95. if not Collect.query.filter_by(
  96. topics__id=topic.id, author_id=user.id).exists():
  97. collect.topics.append(topic)
  98. collect.save()
  99. MessageClient.collect(topic)
  100. return redirect(url_for('topic.topic', topicId=topic.id))
  101. # def delete(self, topicId):
  102. # user = request.user
  103. # form = request.form.getlist('add-to-collect')
  104. # topic = Topic.query.filter_by(id=topicId).first_or_404()
  105. # for cid in form:
  106. # '''This has a problem'''
  107. # collect = Collect.query.filter_by(id=cid).first_or_404()
  108. # if not Collect.query.filter_by(
  109. # topics__id=topic.id, author_id=user.id).exists():
  110. # collect.topics.append(topic)
  111. # collect.save()
  112. # return redirect(url_for('topic.topic', topicId=topic.id))