views.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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-15 22:06:39 (CST)
  9. # Last Update:星期三 2017-1-25 21:47:19 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import request, render_template, g, redirect
  14. from flask_maple.serializer import FlaskSerializer as Serializer
  15. from flask_maple.response import HTTPResponse
  16. from flask_maple.auth.forms import form_validate
  17. from flask_login import current_user
  18. from common.views import BaseMethodView as MethodView
  19. from .models import Reply
  20. from .forms import ReplyForm
  21. def error_callback():
  22. return redirect('/')
  23. class ReplyListView(MethodView):
  24. def get(self):
  25. form = ReplyForm()
  26. page, number = self.page_info
  27. replies = Reply.get_list(page, number)
  28. if g.user.is_authenticated:
  29. like = Reply.query.filter_by(
  30. likers__username=current_user.username)
  31. data = {'replies': replies, 'form': form}
  32. return render_template('reply/reply_list.html', **data)
  33. # serializer = Serializer(replies, many=True)
  34. # return HTTPResponse(HTTPResponse.NORMAL_STATUS,
  35. # **serializer.data).to_response()
  36. @form_validate(ReplyForm, error=error_callback, f='')
  37. def post(self):
  38. post_data = request.data
  39. content = post_data.pop('content', None)
  40. topic = post_data.pop('topic', None)
  41. reply = Reply(content=content, topic_id=int(topic))
  42. reply.author = current_user
  43. reply.save()
  44. serializer = Serializer(reply, many=False)
  45. return HTTPResponse(HTTPResponse.NORMAL_STATUS,
  46. **serializer.data).to_response()
  47. class ReplyView(MethodView):
  48. def get(self, replyId):
  49. user = Reply.get(id=replyId)
  50. serializer = Serializer(user, many=False)
  51. return HTTPResponse(
  52. HTTPResponse.NORMAL_STATUS, data=serializer.data).to_response()
  53. def put(self, replyId):
  54. post_data = request.data
  55. reply = Reply.query.filter_by(id=replyId).first()
  56. content = post_data.pop('content', None)
  57. if content is not None:
  58. reply.content = content
  59. reply.save()
  60. serializer = Serializer(reply, many=False)
  61. return HTTPResponse(HTTPResponse.NORMAL_STATUS,
  62. **serializer.data).to_response()
  63. def delete(self, replyId):
  64. reply = Reply.query.filter_by(id=replyId).first()
  65. reply.delete()
  66. serializer = Serializer(reply, many=False)
  67. return HTTPResponse(HTTPResponse.NORMAL_STATUS,
  68. **serializer.data).to_response()
  69. class LikeView(MethodView):
  70. def post(self, replyId):
  71. reply = Reply.query.filter_by(id=replyId).first()
  72. reply.likers.append(current_user)
  73. reply.save()
  74. serializer = Serializer(reply, many=False)
  75. return HTTPResponse(HTTPResponse.NORMAL_STATUS,
  76. **serializer.data).to_response()
  77. def delete(self, replyId):
  78. reply = Reply.query.filter_by(id=replyId).first()
  79. reply.likers.remove(current_user)
  80. reply.save()
  81. serializer = Serializer(reply, many=False)
  82. return HTTPResponse(HTTPResponse.NORMAL_STATUS,
  83. **serializer.data).to_response()