views.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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:08:06 (CST)
  9. # Last Update: Monday 2019-05-06 23:36:53 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import redirect, render_template, request, url_for
  14. from flask_login import current_user, login_required
  15. from forums.api.topic.db import Topic, Reply
  16. from forums.common.utils import gen_filter_dict, gen_order_by
  17. from forums.common.views import BaseMethodView as MethodView
  18. from .db import User
  19. class UserListView(MethodView):
  20. @login_required
  21. def get(self):
  22. query_dict = request.data
  23. page, number = self.pageinfo
  24. keys = ['username']
  25. order_by = gen_order_by(query_dict, keys)
  26. filter_dict = gen_filter_dict(query_dict, keys)
  27. users = User.query.filter_by(
  28. **filter_dict).order_by(*order_by).paginate(page, number, True)
  29. return render_template('user/user_list.html', users=users)
  30. class UserView(MethodView):
  31. def get(self, username):
  32. query_dict = request.data
  33. user = User.query.filter_by(username=username).first_or_404()
  34. page, number = self.pageinfo
  35. keys = ['title']
  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. topics = Topic.query.filter_by(
  40. **filter_dict).order_by(*order_by).paginate(page, number, True)
  41. setting = user.setting
  42. topic_is_allowed = False
  43. if setting.topic_list == 1 or (setting.topic_list == 2
  44. and current_user.is_authenticated):
  45. topic_is_allowed = True
  46. if current_user.is_authenticated and current_user.id == user.id:
  47. topic_is_allowed = True
  48. data = {
  49. 'topics': topics,
  50. 'user': user,
  51. 'topic_is_allowed': topic_is_allowed
  52. }
  53. return render_template('user/user.html', **data)
  54. class UserReplyListView(MethodView):
  55. def get(self, username):
  56. query_dict = request.data
  57. user = User.query.filter_by(username=username).first_or_404()
  58. page, number = self.pageinfo
  59. keys = ['title']
  60. order_by = gen_order_by(query_dict, keys)
  61. filter_dict = gen_filter_dict(query_dict, keys)
  62. filter_dict.update(author_id=user.id)
  63. replies = Reply.query.filter_by(
  64. **filter_dict).order_by(*order_by).paginate(page, number, True)
  65. setting = user.setting
  66. replies_is_allowed = False
  67. if setting.rep_list == 1 or (current_user.is_authenticated
  68. and setting.rep_list == 2):
  69. replies_is_allowed = True
  70. if current_user.is_authenticated and current_user.id == user.id:
  71. replies_is_allowed = True
  72. data = {
  73. 'replies': replies,
  74. 'user': user,
  75. 'replies_is_allowed': replies_is_allowed
  76. }
  77. return render_template('user/replies.html', **data)
  78. class UserFollowerListView(MethodView):
  79. @login_required
  80. def get(self, username):
  81. user = User.query.filter_by(username=username).first_or_404()
  82. page, number = self.pageinfo
  83. followers = user.followers.paginate(page, number, True)
  84. data = {'followers': followers, 'user': user}
  85. return render_template('user/followers.html', **data)
  86. class UserFollowingListView(MethodView):
  87. @login_required
  88. def get(self, username):
  89. return redirect(url_for('follow.topic'))
  90. class UserCollectListView(MethodView):
  91. def get(self, username):
  92. return redirect(url_for('follow.collect'))